【问题标题】:Reading data from other form从其他表单读取数据
【发布时间】:2013-06-01 13:50:21
【问题描述】:

如何从其他主窗体读取数据,例如在辅助窗体中使用的简单文本?

我在主窗体中使用了一个公共变量进行分配,但是当我调用主窗体时,该变量为 NULL。

【问题讨论】:

  • 请显示你如何称呼它,也让它成为静态
  • Tels tels = new Tels(); txtName.Text = tels.NameAndSureName();
  • tels 是主窗体的名称
  • 默认情况下,字符串为 NULL。每次您执行“Tels tels = new Tels();”时,您都会在内存中创建一个全新的表单。它的所有值都设置为默认值,包括您的公共字符串变量。因此,您将获得 NULL 作为回报。

标签: c#-4.0


【解决方案1】:

为此,您可以使用几种方法。其中之一(可能不是很好的做法,但我不知道这些数据的其他用途。

首先在SecondaryForm中创建一个保持MainForm引用的变量:

Private MainForm mainForm;

然后创建Secondary form的构造函数,作为对main form的参数引用

Public SecondaryForm(MainForm mainForm)
{
    this.mainForm = mainForm;    
}

然后,当您打开一个辅助表单(我假设您从 MainForm 打开它)时,使用您的新构造函数创建一个 SecondaryForm 实例:

//somewhere in MainForm
SecondaryForm secondaryForm = new SecondaryForm(this);
secondaryForm.Show()    //or ShowDialog()

在SecondaryForm的内部代码之后,您可以使用您的MainForm实例的所有公共属性/方法

【讨论】:

    【解决方案2】:

    有很多方法可以将值传递给另一个表单,一种是在被调用表单的constructor 中传递,然后将其传递给local/private property

    假设你在Form1,你打电话给Form2

     Form2 frmCalled = new Form2("Pass this value");
    

    你的Form2 中的constructor 现在将拥有这个

        public Form2(String val)
        {
            InitializeComponent();
            this.passval = val;
        }
    

    这意味着你有一个名为passvalproperty 喜欢:

      private string passval { get; set; }
    

    所以,如果你想使用它,那么你现在可以通过简单地调用属性来使用它。例如,如果单击Form2 中的按钮并且您现在想分配该值,那么您将拥有:

     private void button1_Click(object sender, EventArgs e)
        {
            String receivedValue;
            receivedValue = passval;
        }
    

    另一种方法是使用父窗体中的staticpublic 属性,然后从辅助窗体或被调用窗体中调用它。假设在您的 Form1 或 Parent 表单中,您将声明如下:

      public static string fromParentForm { get; set; }
    

    假设您正在调用Form2 或被调用的表单,您将这样做:

     Form2 frmCalled = new Form2();
     fromParentForm = "Parent Form Value here"; // Put value first in your static property
     frmCalled.Show();
    

    然后在Form2 中可以访问Parent Form 的值或属性,例如:

     private void button1_Click(object sender, EventArgs e)
        {
            // Value from Parent form static property could be access anywhere in the form
            MessageBox.Show(Form1.fromParentForm);
        }
    

    【讨论】:

    • 谢谢@A.Goutam。上帝保佑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2016-03-05
    相关资源
    最近更新 更多