我在表单之间传递变量时遇到了一些麻烦。我创建了一个按钮数组,并希望将按钮文本传递给下一个表单。但这只是返回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;
非常感谢任何帮助。提前致谢
答案 0 :(得分:0)
你没有传递任何东西,你正在创建一个新表格
Form1 f1 = new Form1();
staffmem = f1.Staffmem;
如果要共享数据 - 一种非常糟糕的方法是使字符串静态
private static string staffmem;
答案 1 :(得分: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
对象传递给Form1
对象,当{{1创建对象(遵循上面概述的技术)
答案 2 :(得分:0)
您正在创建一个全新的Form1
- 其中,您希望使用现有实例。
您需要做的是在Staffmem
对象上定义MainScreen
,并在创建后设置它。
MainScreen ms = new MainScreen();
ms.Staffmem = btn.Text;
然后,在您的MainScreen_Load中: 设置值。
答案 3 :(得分: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;
}