Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中使用访问器传递_C# - Fatal编程技术网

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;
}

啊,对,那是有道理的。非常感谢你的帮助。我想这是一个常见的错误。