在C#中使用Accessor传递

时间:2012-05-27 11:21:09

标签: c#

我在表单之间传递变量时遇到了一些麻烦。我创建了一个按钮数组,并希望将按钮文本传递给下一个表单。但这只是返回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 个答案:

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