我对c#很新。我有一个带有2个按钮的winform。 button1_click()生成一些数据,如data1,data2,data3,data4。现在我想在button2_click()中使用这些数据:

    private void button1_click(object sender, EventArgs e)
    {
         //generate data1, data2, data3, data4..
    }



    private void button2_click(object sender, EventArgs e)
    {
        //do processing using data1, data2, data3, data4..
    }

我认为这在c#中应该相对简单,而不使用文件等。 我知道我可以使用从EvenArgs派生的自定义类传递参数,但是我需要先获取数据才能传递它。

有帮助吗?

解决方案

这样做的简单方法是在Form中添加一些包含这两个按钮的状态(我假设它们在同一个表单上)。

因此,在您拥有已发布方法的同一个类中,您需要添加成员:

class MyForm : Form
{
    MyType data1;
    MyType data2;


    private void button1_click(object sender, EventArgs e)
    {
         //generate data1, data2, data3, data4.. <-- here you just set the state of the Form
    }



    private void button2_click(object sender, EventArgs e)
    {
        //do processing using data1, data2, data3, data4.. <-- here you use the state set by button 1
    }
}

其他提示

为data1等创建私有字段并在 button1_click 中设置它们一旦设置它们将通过 button2_click 中的当前实例可用。

FIelds是对象实例的共享状态的一部分。这意味着任何实例字段(未标记为静态且在当前类型的主体内声明的字段)都可用于所有实例方法(未标记为静态且在当前类型的主体内声明的方法) 。由于两个按钮单击事件处理程序都是实例方法,因此它们都可以访问字段。

尝试这样的事情:

class Foo
{
    // These are the fields
    Object data1;
    Object data2;
    Object data3;
    Object data4;

    void button1_click(object sender, EventArgs e)
    {
         this.data1 = generateData1();
         this.data2 = generateData2();
         this.data3 = generateData3();
         this.data4 = generateData4();
    }

    void button2_click(object sender, EventArgs e)
    {
        // In this method you can access this.data1 etc. since
        // they are instance fields
    }
}

您可以使用类字段:

private string data1 = "";
private string data2 = "";
private string data3 = "";

private void button1_click(object sender, EventArgs e)
{
    data1 = "some data for field1";
    data2 = "some data for field2";
    data3 = "some data for field3";
}

private void button2_click(object sender, EventArgs e)
{
    // use data1, data2, ... here:
    MessageBox.Show(data1 + data2 + data3);
}

示例:

public class MyForm : Form {

    private string _data1;

    private void button1_click(object sender, EventArgs e) {
        _data1 = "hello";
    }

    private void button2_click(object sender, EventArgs e) {
       MessageBox.Show(_data1);
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top