Получение информации от button1_click () к button2_click () - PullRequest
0 голосов
/ 28 ноября 2009

Я довольно новичок в c #. У меня есть одна winform с 2 кнопками на нем. 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, но мне нужно сначала получить данные, прежде чем я смогу их передать.

Ответы [ 4 ]

1 голос
/ 28 ноября 2009

Создайте приватные поля для data1 и т. Д. И установите их в button1_click, как только они будут установлены, они будут доступны через текущий экземпляр в button2_click.

Поля являются частью общего состояния экземпляра объекта . Это означает, что любые поля экземпляра (поля, которые не помечены как статические и объявлены в теле текущего типа) доступны для всех методов экземпляра (методы, которые не помечены как статические и объявлены в теле текущего типа) , Поскольку оба ваших обработчика события нажатия кнопки являются методами экземпляра, они оба могут обращаться к полям.

Попробуйте что-то вроде этого:

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
    }
}
0 голосов
/ 28 ноября 2009

Самый простой способ сделать это - добавить в форму некое состояние, содержащее эти две кнопки (я полагаю, они находятся в одной форме).

Итак, в том же классе, в котором у вас есть опубликованные методы, вам нужно добавить членов:

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
    }
}
0 голосов
/ 28 ноября 2009

Пример:

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);
    }
}
0 голосов
/ 28 ноября 2009

Вы можете использовать поля класса:

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