Como acessar methods de formulário e controles de uma class em c #?

Eu estou trabalhando em um programa c #, e agora eu tenho um Form e um par de classs. Eu gostaria de poder acessar alguns dos controles de Form (como um TextBox ) da minha class. Quando tento alterar o texto no TextBox da minha class, recebo o seguinte erro:

Uma referência de object é necessária para o campo não estático, método ou propriedade ‘Project.Form1.txtLog’

Como posso acessar methods e controles que estão em Form1.cs de uma das minhas classs?

Você está tentando acessar a class em oposição ao object. Essa declaração pode ser confusa para iniciantes, mas você está efetivamente tentando abrir a porta da sua casa, pegando a porta em seus planos de casa.

Se você realmente quisesse acessar os componentes do formulário diretamente de uma class (o que não é o caso), você usaria a variável que instancia seu formulário.

Dependendo de qual caminho você quer ir, seria melhor enviar o texto de um controle ou o que quer que seja para um método em suas aulas, por exemplo:

 public void DoSomethingWithText(string formText) { // do something text in here } 

ou expondo propriedades em sua class de formulário e definindo o texto do formulário lá – por exemplo

 string SomeProperty { get { return textBox1.Text; } set { textBox1.Text = value; } } 

Outra solução seria passar a checkbox de texto (ou controle que você deseja modificar) para o método que irá manipulá-lo como um parâmetro.

 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { TestClass test = new TestClass(); test.ModifyText(textBox1); } } public class TestClass { public void ModifyText(TextBox textBox) { textBox.Text = "New text"; } } 
  1. você precisa ter uma referência ao object form para acessar seus elementos
  2. os elementos devem ser declarados públicos para que outra class possa acessá-los
  3. não faça isso – sua turma precisa saber muito sobre como seu formulário é implementado; não exponha controles de formulário fora da class de formulário
  4. em vez disso, crie propriedades públicas em seu formulário para obter / definir os valores nos quais você está interessado
  5. postar mais detalhes do que você quer e por que, parece que você pode estar indo em uma direção que não é consistente com boas práticas de encapsulamento

Você precisa acessar o object …. você não pode simplesmente pedir a class form ….

por exemplo…

você teria feito alguma coisa como

 Form1.txtLog.Text = "blah" 

ao invés de

 Form1 blah = new Form1(); blah.txtLog.Text = "hello" 

Se o formulário for iniciado primeiro, no formulário Load handler, podemos instanciar uma cópia de nossa class. Podemos ter propriedades que referenciam quaisquer controles que queremos referenciar. Passe a referência ao formulário ‘this’ para o construtor da class.

 public partial class Form1 : Form { public ListView Lv { get { return lvProcesses; } } public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Utilities ut = new Utilities(this); } } 

Em sua class, a referência do formulário é passada para o construtor e armazenada como um membro particular. Esta referência de formulário pode ser usada para acessar as propriedades do formulário.

 class Utilities { private Form1 _mainForm; public Utilities(Form1 mainForm) { _mainForm = mainForm; _mainForm.Lv.Items.Clear(); } } 

Você precisa tornar os membros no para a class de formulário públicos ou, se a class de serviço estiver no mesmo assembly, internal. A visibilidade dos controles do Windows pode ser controlada por meio de suas propriedades Modifiers.

Observe que geralmente é considerada uma prática ruim vincular explicitamente uma class de serviço a uma class de interface do usuário. Em vez disso, você deve criar boas interfaces entre a class de serviço e a class de formulário. Dito isso, para aprender ou simplesmente andar por aí, a Terra não vai sair do eixo se você expor membros do formulário para classs de serviço.

rp

Eu sou relativamente novo em c # e novo em stackoverflow. De qualquer forma, sobre a questão de como acessar controles em um formulário de uma class: eu usei apenas a class ControlCollection (Controls) do formulário.

  //Add a new form called frmEditData to project. //Draw a textbox on it named txtTest; set the text to //something in design as a test. Form frmED = new frmEditData(); MessageBox.Show(frmED.Controls["txtTest"].Text); 

Trabalhou para mim, talvez seja de ajuda em ambas as perguntas.

APENAS VOCÊ PODE ENVIAR FORMULÁRIO PARA CLASSE COMO ESTE

 Class1 excell = new Class1 (); //you must declare this in form as you want to control excel.get_data_from_excel(this); // And create instance for class and sen this form to another class 

CLASSE INTERNA COMO VOCÊ CRIE CLASS1

 class Class1 { public void get_data_from_excel (Form1 form) //you getting the form here and you can control as you want { form.ComboBox1.text = "try it"; //you can chance Form1 UI elements inside the class now } } 

IMPORTANTE: Mas você não deve se esquecer de você ter declarado as propriedades do formulário modificador como PUBLIC e você pode acessar de outra forma você não pode ver o controle no formulário da class