Como passar valores entre formulários no aplicativo c # windows?

Eu tenho dois formulários A e B. O formulário A é o formulário de boot padrão do aplicativo. Eu faço algumas coisas no formulário A e, em seguida, eu quero executar meu paralelo de formulário B e, em seguida, passar um parâmetro para um método no formulário B do formulário a.

Como ?

Ian deu algum código de exemplo, mas eu gostaria de fazer um ponto mais amplo:

Classes de interface do usuário são apenas classs.

Como você passaria um valor de um object para outro se eles não fizessem parte da interface do usuário? Você teria uma referência de um para o outro e chamaria um método ou definiria uma propriedade. A mesma coisa vale para objects da interface do usuário.

Eu menciono isso porque é algo que surge muito. Sempre que você se perguntar: “Como faço o X com formulários?” tente se fazer a mesma pergunta, mas com classs simples. Muitas vezes a resposta será exatamente a mesma.

É claro que existem algumas diferenças para as classs de interface com o usuário – particularmente com o threading – mas, para uma grande quantidade de casos, é realmente bom se você pensar nelas como classs normais.

FormA deve construir / manter uma instância para FormB. Obviamente, o método no FormB precisa ser público, altere o tipo de object usado em CallMethodOnFormB para o tipo correto também.

public class FormA { private FormB fB; public void CreateFormB() { // This shows the form in parallel. this.fB = new FormB(); this.fB.Show(); } public void CallMethodOnFormB(object value) { this.fB.RunSomeFunction(value); } } 

Dependendo de suas necessidades, outra abordagem seria introduzir uma instância global de uma class (um singleton ), que pode armazenar coisas que devem ser compartilhadas entre vários formulários / classs de sua aplicação.

Por exemplo, se você tem um formulário onde o usuário pode definir suas configurações / preferências, você pode armazenar esses dados em um singleton. Todas as outras classs e formas de sua aplicação podem acessar / ler essas configurações a partir da mesma instância singleton.

Aqui está um exemplo muito básico de um singleton:

 public class MySettings { // the one and only instace (the singleton): public static readonly MySettings Instance = new MySettings(); private MySettings() {} // private constructor public int SomeNumber { get; set; } public string SomeString { get; set; } } 

Agora você pode acessar set / get as propriedades do MySetting de qualquer outra class / formulário em sua aplicação, por exemplo:

em PreferencesForm.cs:

 //read the user's input and store it in the settings MySettings.Instance.SomeNumber = txtNumber.Value; 

em SomeOtherForm.cs:

 //read the user's setting and use it int theNumber = MySettings.Instance.SomeNumber; // do something with theNumber