C# 在C中使用访问器传递
我在表单之间传递变量时遇到了一些问题。我已经创建了一个按钮数组,希望将按钮文本传递到下一个表单。但这只是返回一个空值 以第一种形式C# 在C中使用访问器传递,c#,C#,我在表单之间传递变量时遇到了一些问题。我已经创建了一个按钮数组,希望将按钮文本传递到下一个表单。但这只是返回一个空值 以第一种形式 private string staffmem; public string Staffmem { get { return staffmem; } } public void ClickButton(Object sender, EventArgs e)
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;
任何帮助都将不胜感激。提前感谢您没有传递任何信息,您正在创建一个新表单
Form1 f1 = new Form1();
staffmem = f1.Staffmem;
如果要共享数据,一个非常糟糕的方法是将字符串设为静态
private static string staffmem;
您正在通信的两端创建新表单:当单击按钮时以及当您想要检索文本时-这将导致访问新创建对象上的Staffmem字段,该字段未设置为任何值,因此返回空值 为了能够检索文本,您需要在创建时将相同的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对象传递给Form1对象,当按照上述技术创建Form1对象时,您正在创建一个全新的Form1,其中,您希望使用现有的实例 您需要做的是在MainScreen对象上定义Staffmem,并在创建它之后进行设置
MainScreen ms = new MainScreen();
ms.Staffmem = btn.Text;
然后,在主屏幕上加载:
设置值。您正在处理两个不同的对象,首先创建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;
}
啊,对,那是有道理的。非常感谢你的帮助。我想这是一个常见的错误。