Eu tenho um formulário principal (vamos chamá-lo de frmHireQuote) que é filho de um formulário MDI principal (frmMainMDI), que mostra outro formulário (frmImportContact) via ShowDialog () quando um botão é clicado.
Quando o usuário clica em 'OK' em frmImportContact, desejo passar algumas variáveis de string de volta para algumas caixas de texto em frmHireQuote.
Observe que pode haver várias instâncias do frmHireQuote, é obviamente importante que eu volte à instância que chamou essa instância de frmImportContact.
Qual é o melhor método para fazer isso?
fonte
Normalmente, crio um método estático no formulário / caixa de diálogo que posso chamar. Isso retorna o sucesso (botão OK) ou falha, junto com os valores que precisam ser preenchidos.
E no formulário:
Para chamar seu formulário;
fonte
frm
lata (e apenas fiz quando eu lê-lo) levam a confusão ...Encontrei outro pequeno problema com esse código ... ou pelo menos era problemático quando tentei implementá-lo.
Os botões no frmMain não retornam um valor compatível, usando o VS2010 eu adicionei o seguinte e tudo começou a funcionar bem.
Depois de adicionar os dois valores do botão, a caixa de diálogo funcionou muito bem! Obrigado pelo exemplo, realmente ajudou.
fonte
Acabei de colocar no construtor algo por referência, para que o subformulário possa alterar seu valor e a forma principal possa obter objetos novos ou modificados do subformulário.
fonte
Eu uso muito o MDI, gosto muito mais (onde pode ser usado) do que vários formulários flutuantes.
Mas, para tirar o melhor proveito, você precisa se familiarizar com seus próprios eventos. Isso torna a vida muito mais fácil para você.
Um exemplo esquelético.
Tenha seus próprios tipos de interrupção,
Então seu próprio tipo de Args
Em seguida, use o delegado dentro do seu espaço para nome, mas fora de uma classe
Agora, manualmente ou usando a GUI, peça ao MDIparent que responda aos eventos dos formulários filhos.
Mas com o seu proprietário Args, você pode reduzir isso para uma única função. e você pode ter provisão para interromper as interrupções, bom para depuração, mas também pode ser útil de outras maneiras.
Basta ter todos os seus códigos de evento mdiparent apontados para a única função,
Um mecanismo simples de troca geralmente é suficiente para passar eventos para os formulários apropriados.
fonte
Se você deseja passar dados
form2
deform1
sem passar como novosform(sting "data");
Faça assim no formulário 1
no formulário 2 adicione
Além disso, você pode usar um valor
form1
como este se quiser trocar algoform1
apenas no form1
fonte
Primeiro, você precisa definir o atributo no formulário2 (filho); você atualizará esse atributo no formulário2 e também no formulário1 (pai):
Chamada do formulário2 (filho) do formulário1 (pai):
fonte
Eu levanto um evento no formulário que define o valor e assino esse evento nos formulários que precisam lidar com a alteração de valor.
fonte
delegados são a melhor opção para enviar dados de um formulário para outro.
fonte