Gerador de Código - Forms - Visual Basic .NET - Portugal-a-Programar
Gerador de Código - Forms
Por José Lopes, 26 de Novembro de 2008 em Visual Basic .NET
Já há algum tempo que ando a congeminar esta ideia....vamos ver se alguém já fez?
Grande parte do trabalho que desenvolvo consiste em criar forms para interacção com BD....
As rotinas de acesso a dados estão completamente estáveiss... mas continuo a ter que criar cada elemento do form à unha....
Imaginando que cada form tem 50 campos de uma tabela, tenho que criar 50 controlos, setar-lhes um nome específico e a tag (tem a ver com os meus métodos) e + o design... perca de tempo pura.
A minha ideia era criar um form gerador de código...
Criar os controlos e setar-lhes as propriedades em runtime.... nao e problema... mas na realidade, o que eu gostava mesmo era de criar o objecto em definitivo.. ou seja... basicamente... criar um novo form que possa depois aceder e ajeitar em design... alguem ja fez alguma coisa do genero.
Caro José Lopes , acho que isso era bastante interessante , mas acho que um bom copy paste resolveria o problema, em vb6 eu fazia isso para optimizar o tempo , mas vamos deixar que os entendidos se pronunciem.
pois....mas o copy não me cria os controlos com os nomes que eu quero..
tipo..eu ligava-me a uma bd e ele criava-me tantos controlos como os campos necessários, de acordo com o tipo... e por ai fora...depois era so compor o design
Estás a referir-te a algo como os wizards em access ?
É uma ideia que na realidade não sinto muita falta. A maioria dos forms que usam têm meia duzia de textbox's e nem uso as disponíveis, porque utilizo texbox's alteradas. Depois uso outras coisas como datetimepicker, combobox's, etc.
A ideia é criar este tipo de controlos automáticamente ?
Porque não crias um projecto (na secção de projectos) para se iniciar esse trabalho em equipa ? Não me parece muito dificil, e podia-se criar um add-ins para o visual studio que permitisse fazer isso.
quer dizer... nao era precisa uma coisa tão elaborada...........
eu so queria saber mesmo como transformar o runtime em definitvo..
mas provavelmente tenho que enviar td para os ficheiros que constituem um form.
assim de repente... nao sei se me fiz entender
Esse tipo de ferramentas existe e estão na moda há algum tempo sendo que a sua popularidade continua a crescer.
Não sei se existe para VB6, mas existe para outras linguagens e com diversas variantes.
Se trabalhas naquela base de andar a fazer forms à carrada, uma ferramenta destas é muito útil mesmo.
Uma abordagem típica e 'sexy' é definires a base de dados a partir de um formato simples de editar e depois gerares a base de dados e os forms tudo ao mesmo tempo.
Claro que isto implica em certa medida não usar funcionalidades mais esotéricas das bases de dados, nomeadamente transacções, procedimentos, etc.
Estando esse problema mitigado, resolvido, ou não sendo de todo um problema, uma ferramenta destas é o caminho!
Em VB acho que ficava bem definir as bases de dados em ficheiros INI, acho que seria uma forma de o pessoal experimentar sem se assustar. Claro que há muitas mais hipóteses.
EDIT: Em resposta a este último post. Nunca programei nada em VB, mas acredito que o caminho a seguir é geração de ficheiros de código fonte, tal como no exemplo que acabei de mostrar.
Então mas se tu preparas o código para funcionar em runtime e depois queres transformar para estar visível em design time, não entendo onde irias ganhar tempo!
Não tinha mais lógica como mencionei ?
EDIT: Um pouco o que o pedrotuga já disse
Sim, também existe para VB, embora não me lembro onde já vi. É uma questão de procurar melhor.
Podes por exemplo criar uma subclasse de Form e no construtor dessa subclasse fazes a leitura à base de dados e adicionas os controlos que quiseres no próprio construtor. Depois, o teu Form principal tem de herdar dessa subclasse e já está.
Só terá um problema (que dá para resolver mas eu agora não me lembro como) é que tudo que adicionares não irá ficar propriamente "arrastavel" e configurável no Form principal.
Mas já tens algo por onde começar...
basicamente sim... a unica coisa que eu quero,....e pegar num form e espetar-lhe la 50 campos de acordo com o definido na BD para a tabela X... o objectivo é depois editar o form...ajeitar tudo... adicionar as tab's, as listviews... e por ai fora... pk na metodologia que estou a usar... existe sempre uma relação com qq coisa....
aquilo que eu quis dize jpaulino foi que em runtime...em consigo fazer a coisa... e simples... tas num form... e carregas os controlos tal como eu queria...
Continuaria a ser tudo em runtime.... inclusive os outros elementos que n dependem da BD
Em resposta a este último post. Nunca programei nada em VB, mas acredito que o caminho a seguir é geração de ficheiros de código fonte, tal como no exemplo que acabei de mostrar.
penso que passará por aqui,....
E o que achas da ideia ?
yap..e uma boa ideia....
mas para postar logo............
Eu por "runtime" entendo uma aplicação em execução, logo, não, não continuaria a ser tudo em runtime mas em designtime.
public class BDForm : Form {
public BDForm() {
this.Controls.Add(new Label() {
Name = "label" + i,
Text = "BD Campo #" + i + ":",
Location = new Point(15, (30 * i) - 10)
this.Controls.Add(new TextBox() {
Location = new Point(100, (30 * i) - 12)
public partial class FormPrincipal : BDForm {
Está em C#, mas a treta em VB.NET é a mesma... Só tem o tal problema que te disse. No FormPrincipal não vais conseguir seleccionar os controlos, mudar-lhe as propriedades, mover de um lado para o outro. Mas dá para fazer isso, só que agora não me recordo como e não tenho tempo para procurar...
Entendes e bem!
ok...mas isso estaria a ser feito quando o codigo começasse a correr não (apesar de estar embutido)?
Axo que ja estou a ficar todo trocado!
O que tu queres não é um wizard como o access tem para criar os forms ?
jpaulino, acho que ainda não percebeste bem a ideia dele.
A ideia é pegares por exemplo num SQLdump, manda-lo para esta aplicação e esta aplicação manda cá para fora uma implementação do CRUD.
Imagina uma base de dados com 200... mesmo que tenhas uma coisa muito simples de usar que te permite criar forms com drag and drops ou que possas fazer copy paste, o que quer que seja, terás que o fazer 200 vezes o que é pouco produtivo.
Acho que o um nom exemplo é o link que eu afixei no meu anterior post.
Pelo que percebi a ideia não é criar um ORM, até porque isso tem muuuuuuuuuuito mais que se lhe diga, é simplesmente gerar forms de forma automática para depois ajustar. No fundo é aquilo que as frameworks web que por aí andam chamam scaffold.
Provavelmente não estou sintonizado
Mas o que me lembro são os wizards do microsoft access em que tu escolhes a tabela, seleccionas os campos que queres e ele gera-te o form, campos, botões de navegação/gravação e faz o bind dos campo com as textboxes.
Foi isso que entendi ... mas vou ver o teu exemplo (ainda não tinha visto).
Mais ou menos... O teu FormPrincipal será herdado do BDForm e ao compilares uma vez a aplicação, o código todo no BDForm foi executado. Não precisas de correr a aplicação... Basta compilares tudo uma vez para veres o FormPrinciapl a actualizar sem correres a aplicação. Copia o código e experimenta para veres...
Mas se fizeres alterações, tens de compilar de novo para ver as alterações. Por exemplo, imagina que tinhas compilado, viste como ficava, mas neste caso, precisas de um for até 10 em vez de 5. Ao mudares o 5 para 10, vais necessitar de compilar de novo para ver as alterações.
Estão todos mais ou menos certos...e fiquei bastante mais esclarecido:
jpaulino ... seria qualquer coisa de intermédio... nao exactamente um wizard que me fizesse a papinha toda, mas que pelo menos me crie controlos referentes aos campos da base de dados... Criar uma label, uma textbox ou outro elemento que deseje, que lhe chame determinado nome (corresponde ao field da BD) e que lhe ponha uma tag, que vai permitir fazer o ciclo de insercção na BD.
Acho que já entendi..........
Vou tentar e depois logo digo qq coisa... mas penso que é capaz de solucionar... a única dúvida que tenho é se os controlos depois de alterados... localização, ao ser recompilado não voltam à posição inicial?
a única dúvida que tenho é se os controlos depois de alterados... localização, ao ser recompilado não voltam à posição inicial?
Nope. Repara, tu o código que adicionas ao construtor será executado apenas uma vez e isso será feito na criação do controlo. Tu quando mudas uma propriedade num controlo qualquer através da grelha das propriedades, estás a dizer o valor que a respectiva propriedade vai tomar após a criação do controlo. Ou sejas, crias o controlo e a propriedade A vai ter o valor que está definido no construtor mas logo de seguida, vai ser mudado o valor para aquele que tu definiste.
E já agora, para a parte de selecionares os controlos e podes fazer o que quiseres com eles, vê este artigo que tem código em VB.NET:
http://www.developerfusion.com/article/4665/collection-controls-with-rich-design-time-support/6/
Vê se este Link te dá jeito : http://www.mztools.com/index.aspx
Não é bem o que precisas mas com toda a certeza que este addin te vai dar muito jeito!!!
http://img385.imageshack.us/img385/2338/mztoolsue4.jpg
O que acham de usar um gerador de código baseado em banco de dados (qualquer um) e template (modelos) de códigos criados por vocês próprios?
Nada de aprender e usar o código dos outros, apenas use o template pronto ou crie o seu, para gerar código em qualquer linguagem.
Perdemos muito tempo criando telas e recriando rotinas de manutenção de dados, com o UICodeX, você "perderá" tempo apenas uma vez, e use para sempre o código com sua cara.
Não estou propondo eliminar o trabalho de cada artista programador, mas deixar ele livre para criar suas obras extraordinárias.
O gerador pode converter tabela em json, tabela em classes para RTTI, tabela em SQL, tabela em objetos, tabela em componentes e tantas outras utilidades enfim, que só dependerá da criatividade de cada um.