Estou usando o Visual Studio para criar um aplicativo GUI em C #. O Toolbox serve como uma paleta de componentes bacana que me permite arrastar e soltar facilmente botões e outros elementos (para maior clareza, direi o botão sempre que eu quero dizer "controle") no meu formulário, o que facilita bastante a execução de formulários estáticos. No entanto, encontro dois problemas:
- Criar os botões em primeiro lugar é muito trabalhoso. Quando tenho um formulário que não é estático (por exemplo, botões ou outros controles são criados em tempo de execução, de acordo com o que o usuário faz), não consigo usar a paleta. Em vez disso, tenho que criar cada botão manualmente, chamando o construtor em qualquer método que esteja usando e, em seguida, inicialize manualmente, especificando a altura, largura, posição, rótulo, manipulador de eventos e assim por diante. Isso é extremamente tedioso, porque eu tenho que adivinhar todos esses parâmetros cosméticos sem poder ver como será a forma e também gera muitas linhas de código repetitivo para cada botão.
- Fazer os botões fazerem algo também é muito trabalhoso. Lidar com eventos em um aplicativo completo é uma grande dor. A única maneira de saber como fazer isso é selecionar um botão, ir para a guia de eventos em suas propriedades, clicar no
OnClick
evento para que ele gere o evento noForm
código do e, em seguida, preencher o corpo do evento. Como desejo separar lógica e apresentação, todos os meus manipuladores de eventos acabam sendo chamadas de linha única para a função lógica de negócios apropriada. Mas usar isso para muitos botões (por exemplo, imagine o número de botões presentes em um aplicativo como o MS Word) polui o código do meuForm
com dezenas de métodos manipuladores de eventos padrão e é difícil mantê-lo.
Por causa disso, qualquer programa de GUI mais complicado que o Hello World é muito impraticável para mim. Para ser claro, não tenho nenhum problema em lidar com a complexidade dos programas que escrevo com uma interface do usuário mínima - sinto que sou capaz de usar o OOP com um grau razoável de competência para estruturar perfeitamente meu código de lógica de negócios. Mas ao desenvolver a GUI, eu estou preso. Parece tão entediante que sinto que estou reinventando a roda, e há um livro em algum lugar por aí explicando como fazer a GUI corretamente que eu não li.
Estou esquecendo de algo? Ou todos os desenvolvedores de C # simplesmente aceitam as listas intermináveis de manipuladores de eventos repetitivos e o código de criação de botões?
Como uma sugestão (espero que útil), espero que uma boa resposta fale sobre:
- Usando técnicas de POO (como o padrão de fábrica) para simplificar a criação repetida de botões
- Combinando muitos manipuladores de eventos em um único método que verifica
Sender
para descobrir qual botão chamou e se comporta de acordo - XAML e usando o WPF em vez do Windows Forms
Você não precisa mencionar nada disso, é claro. É apenas o meu melhor palpite sobre o tipo de resposta que estou procurando.