为什么我不能将公共变量从一个表单复制到另一个表单?

时间:2017-02-06 08:18:29

标签: c#

(希望这不是重复的)

我在同一个项目中有两个表单(FormA,FormB)。我在专用的单独类中使用静态属性初始化这些表单。 FormA中有一个公共变量可以接收文本框字符串。我想从FormB访问该变量,将其内容复制到formB文本框。但它失败了。

class utilities
{
   public static FormA formA = new FormA();
   public static FormB formB = new FormB();
}

表格A

public partial class FormA : Form
{
    //Note : This form is the first that is opened when the program starts
    public string textA;
    private void formA_Load(object sender, EventArgs e)
        {
            /*formATextBox.Text recieves its value here using C# random number
            generation function*/

            textA = formATextBox.Text 

            /* MessageBox.Show(textA) here confirms that 
              the text has been copied in the variable */
        }
}

表格B

public partial class formB : Form
{
    //This form is opened onclick of a button on formA

    private void formB_Load(object sender, EventArgs e)
        {
            formBTextBox.Text = Utilities.formA.textA;  
            //This line fails i.e. it returns blank in formBTextBox.Text
        }
}

2 个答案:

答案 0 :(得分:1)

new FormA();的调用不会自动触发Form_Load事件。您需要执行formA.Show()或类似的操作才能开始其初始化和加载循环。

相关,一条建议:

如果您需要将值从一个Form传递到另一个Form,那么使用全局存储位置(例如public static class MyData,根据需要使用静态属性)可以是更好的解决方案。 原因:当Form关闭时,其所有数据都被清除,但静态类MyData在应用程序期间保留在内存中,因此您可以随时随地访问它。

答案 1 :(得分:0)

对我的问题有如此多的负面评论。人们贬低而不是试图解决这个问题......

感谢GSP,Peter B和Patrick Hoffman,我意识到我没有访问正确的表格。

应使用

Application.Run(Utilities.formA)代替默认的Application.Run(new formA())