1

我在表单之间传递变量时遇到了一些麻烦。我创建了一个按钮数组,并希望将按钮文本传递给下一个表单。但这只是返回一个 Null 值

第一种形式

private string staffmem;
    public string Staffmem
    {
        get
        {
            return staffmem;
        }
    }

    public void ClickButton(Object sender, EventArgs e)
    {          
        Button btn = (Button)sender;
        staffmem = btn.Text;
        MessageBox.Show("Welcome " + staffmem);

        MainScreen ms = new MainScreen();
        ms.Show();
    }

然后在第二种形式

        private void MainScreen_Load(object sender, EventArgs e)
    {  
        Form1 f1 = new Form1();
        staffmem = f1.Staffmem;

任何帮助将非常感激。提前致谢

4

4 回答 4

0

您正在通信的两端创建新表单:单击按钮时以及要检索文本时 - 这会导致访问Staffmem新创建的对象上的字段,该字段尚未设置为任何内容,因此返回null值。

为了能够检索文本,您需要与创建时具有相同 Form1的对象MainScreen

MainScreen ms = new MainScreen(form1);

form1实际Form1对象在哪里,并将其存储MainScreen为成员变量

// in MainScreen class
private Form1 f1;

然后Staffmem在存储的成员变量上访问该对象:

// in MainScreen_Load()
staffmem = f1.Staffmem;

注意:根据您的需要,您可能不想在MainScreen每次单击按钮时都创建一个新的。在这种情况下(如果您已经创建MainScreen了要与之通信的对象),则还需要在创建对象时将对象传递给MainScreen对象Form1Form1遵循上述技术)

于 2012-05-27T11:32:13.050 回答
0

您正在创建一个全新的Form1- 其中,您希望使用现有实例。

您需要做的是Staffmem在您的MainScreen对象上定义,并在创建后设置它。

MainScreen ms = new MainScreen();
ms.Staffmem = btn.Text;

然后,在您的 MainScreen_Load: 中设置值。

于 2012-05-27T11:32:44.623 回答
0

您正在使用 2 个不同的对象,首先您创建一个 Form1 对象并单击按钮将在该单个对象上设置属性值,但是在您的主屏幕中您创建一个新的 Form1 实例。

您可以将表单对象作为对 MainScreen 本身的引用传递。

MainScreen ms = new MainScreen(this);
ms.Show();

然后在 MainScreen 类中更新构造函数。

public MainScreen(Form1 form)
{
    this.form1 = form;
}

并将参考保存在一个字段中,就像这样。

private Form1 form1;

在此之后,您可以再次执行此操作,

private void MainScreen_Load(object sender, EventArgs e)
{  
    staffmem = form1.Staffmem;
}
于 2012-05-27T11:33:11.623 回答
0

你没有传递任何东西,你正在创建一个新的表单

Form1 f1 = new Form1(); 
staffmem = f1.Staffmem; 

如果要共享数据 - 一个非常糟糕的方法是使字符串静态

private static string staffmem;
于 2012-05-27T11:31:16.203 回答