Pergunta

Eu sou bastante novo para c #. Eu tenho um winform com 2 botões. button1_click () gera alguns dados dizem data1, data2, data3, data4. Agora eu quero usar esses dados em 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..
    }

Eu suponho que este deve ser relativamente simples de fazer em c # sem usar arquivos e tal. Eu compreendo que eu pode passar argumentos usando uma classe personalizada derivada de EvenArgs, mas eu preciso para se apossar dos dados primeiro antes que eu possa passá-lo.

Foi útil?

Solução

O easies maneira de fazer isso é adicionar algum estado ao seu Form que está contendo estes dois botões (Eu presumo que eles estão na mesma forma).

Assim, na mesma classe em que você tem os métodos postados você precisa adicionar membros:

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

Outras dicas

Criar campos privados para data1 etc. e colocá-las em button1_click uma vez que eles são definidos elas estarão disponíveis através da instância atual em button2_click.

Os campos são parte da de uma instância de objeto estado compartilhado . Isto significa que qualquer campos de instância (campos que não são marcados como estáticos e são declarados dentro do corpo do tipo corrente) estão disponíveis a todos os métodos de instância (métodos que não são marcados como estáticos e são declarados dentro do corpo do tipo corrente) . Uma vez que tanto do seu botão manipuladores clique evento são métodos de instância ambos possam acessar os campos.

Tente algo parecido com isto:

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

Você pode usar campos de classe:

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

Exemplo:

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);
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top