Existe uma maneira padrão de retornar valores de caixas de diálogo personalizadas no Windows Forms?

StackOverflow https://stackoverflow.com/questions/36984

  •  09-06-2019
  •  | 
  •  

Pergunta

Então, no momento, meu projeto tem algumas caixas de diálogo personalizadas que fazem coisas como avisar o usuário sobre seu aniversário ou algo assim.No momento, eles estão apenas fazendo coisas como definir um this.Birthday propriedade assim que obtiverem uma resposta (que é do tipo DateTime?, com o nulo indicando "Cancelar").Em seguida, o chamador inspeciona o Birthday propriedade da caixa de diálogo criada para descobrir o que o usuário respondeu.

Minha pergunta é, existe um padrão mais padrão para fazer coisas assim? Eu sei que podemos definir this.DialogResult para coisas básicas de OK/Cancelar, mas existe uma maneira mais geral no Windows Forms de um formulário indicar "aqui estão os dados que coletei"?

Foi útil?

Solução

Eu diria que expor propriedades em sua caixa de diálogo personalizada é a maneira idiomática de fazer isso, porque é assim que as caixas de diálogo padrão (como Select/OpenFileDialog) fazem isso.Alguém poderia argumentar que é mais explícito e revelador de intenção ter um método ShowBirthdayDialog() que retorne o resultado que você está procurando, mas seguir o padrão da estrutura é provavelmente o caminho mais sábio a seguir.

Outras dicas

existe um padrão mais padrão para fazer coisas assim?

Não, parece que você está usando a abordagem correta.

Se a caixa de diálogo retornar DialogResult.OK, suponha que todas as propriedades necessárias na caixa de diálogo sejam válidas.

Para mim, manter o Dialog retornando as respostas padrão do diálogo e depois acessar os resultados por meio de propriedades é o caminho a percorrer.

Duas boas razões de onde estou:

  1. Consistência - você está sempre fazendo a mesma coisa com um diálogo e a própria natureza da pergunta sugere que os padrões são bons (-:Embora igualmente a questão seja se este é um bom padrão?
  2. Ele permite o retorno de vários valores da caixa de diálogo - ok, há uma discussão totalmente nova aqui também, mas o pragmatismo aplicado significa que é isso que se deseja em algumas circunstâncias, nem sempre é apropriado ou desejável empacotar valores apenas para que você possa passá-los de volta tudo de uma só vez.

O fluxo da lógica também é bom:

if (Dialog == Ok)
{
    // Do Stuff with the entered values
}
else
{
    // Respond appropriately to the user cancelling the dialog
}

É uma boa pergunta – deveríamos questionar coisas assim – mas para mim o padrão atual é decente.

Murph

Para caixas de diálogo de entrada modais, normalmente sobrecarrego ShowDialog e distribuo parâmetros para os dados necessários.

DialogResult ShowDialog(out datetime birthday)

Geralmente acho que é mais fácil descobrir e entender do que misturar minhas propriedades com as mais de 100 que a classe Form expõe.

Para formulários, normalmente tenho um Controller e uma interface IView que usa propriedades somente leitura para passar dados.

Sempre fiz exatamente do jeito que você está descrevendo.Estou curioso para ver se existe uma abordagem mais aceita.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top