Usuário com melhor resposta
Classes e WinForm

Pergunta
-
Olá, eu tenho varias classes e 1 WinForm, mas aqui vou dar o exemplo com 2 classes e 1 WinForm.
1 class: essa classe tem um método que poderia ser chamado através da outra e com a função de imprimir uma mensagem no Winorm(em um richTextBox, textBox, etc..)
2 class: essa é a classe onde deveria ser chamado a função da classe 1, e com isso aparecer a mensagem no WinForm
--------
Bem, eu tenho utilizado o seguinte código na CLASSE 1:
public static void WriteRich(RichTextBox rtbx, string texto)
{
rtbx.AppendText(texto);
}
na CLASSE 2 eu uso ela:
Form1 form = new Form1();
WriteRich(form.richTextBox1, "Texto que deveria aparecer no WinForm");
--------
e no Form a mensagem que deveria aparecer no rich, não aparece.. eu utilizei esse método através de um button no form mesmo, e assim funciono..
private void button1_Click(object sender, EventArgs e)
{
WriteRich(form.richTextBox1, "Texto que deveria aparecer no WinForm");
}
-------
o que eu preciso fazer para que eu possa usar este método através de qualquer classe e aparecer no richTextBox.
Obrigado.
Respostas
-
berTrito,
O ponto é esse - se você cria um outro objeto dentro da sua classe 2, você não vai ter a referencia do form em exibição, é outro objeto, outra coisa, não é o que você está vendo na tela. Faz assim: coloca no construtor da classe 2 uma referencia para o form e no escopo da Classe 2, mantém um campo como referencia:
private Form1 oForm;
public Class2(Form1 meuForm)
{
this.oForm = meuForm;
}.... agora, quando for chamar o método dentro da classe 2, você faz isso:
WriteRich(this.oForm.seuRichTextBox, "seu texto");
... e você precisa da instancia do Form que você quer exibir o texto, então no Form1, quando instanciar a Classe 2, você passa ele como referencia:
Classe2 c2 = new Classe2(this);
... agora esse objeto tem uma referencia válida de um form em exibição e vai conseguir manipulá-lo.
Abraços,
Francisco
- Marcado como Resposta berTrito segunda-feira, 31 de outubro de 2011 18:16
-
Boa tarde berTrito,
aparentemente a solução para o seu problema é a atualização do formulário, utilize o código abaixo para forçar um Refresh no controle.
Abraços,public static void WriteRich(RichTextBox rtbx, string texto) { rtbx.AppendText(texto); rtbx.Refresh(); }
Daniel Cheida de Oliveira- Sugerido como Resposta Daniel Cheida segunda-feira, 31 de outubro de 2011 17:52
- Marcado como Resposta berTrito segunda-feira, 31 de outubro de 2011 18:35
Todas as Respostas
-
berTrito,
O lance é a referencia do seu form. Por exemplo, se você está dentro de um form e quer que o controle daquele form seja preenchido, você tem que passar a referencia do controle do seu form para o método, não instanciar outro form e passá-lo como parametro. Então o evento Click do seu botão seria isso:
WriteRich(this.richTextBox1, "Alguma Coisa");
No seu código da Classe 2, você instanciou o form, passou ele como parametro, mas não chamou a exibição dele:
Form1 form = new Form1();
WriteRich(form.richTextBox1, "Texto que deveria aparecer no WinForm");
form.Show();Abraços,
Francisco
-
Eu estava dizendo que pelo botão já estava funcionando, sem precisar do "this", ele funciona normalmente usado por algum button do form, o problema é que ele não funciona através de uma classe, não aparece no richtextbox a mensagem escrita dentro da classe, e o Form não precisa do .Show, porque ele já está visivel na verdade.
-
berTrito,
O ponto é esse - se você cria um outro objeto dentro da sua classe 2, você não vai ter a referencia do form em exibição, é outro objeto, outra coisa, não é o que você está vendo na tela. Faz assim: coloca no construtor da classe 2 uma referencia para o form e no escopo da Classe 2, mantém um campo como referencia:
private Form1 oForm;
public Class2(Form1 meuForm)
{
this.oForm = meuForm;
}.... agora, quando for chamar o método dentro da classe 2, você faz isso:
WriteRich(this.oForm.seuRichTextBox, "seu texto");
... e você precisa da instancia do Form que você quer exibir o texto, então no Form1, quando instanciar a Classe 2, você passa ele como referencia:
Classe2 c2 = new Classe2(this);
... agora esse objeto tem uma referencia válida de um form em exibição e vai conseguir manipulá-lo.
Abraços,
Francisco
- Marcado como Resposta berTrito segunda-feira, 31 de outubro de 2011 18:16
-
Boa tarde berTrito,
aparentemente a solução para o seu problema é a atualização do formulário, utilize o código abaixo para forçar um Refresh no controle.
Abraços,public static void WriteRich(RichTextBox rtbx, string texto) { rtbx.AppendText(texto); rtbx.Refresh(); }
Daniel Cheida de Oliveira- Sugerido como Resposta Daniel Cheida segunda-feira, 31 de outubro de 2011 17:52
- Marcado como Resposta berTrito segunda-feira, 31 de outubro de 2011 18:35
-
-