RVG Posted October 17, 2007 at 05:02 PM Report Share #140820 Posted October 17, 2007 at 05:02 PM Boax.... Precisava de ajuda num problema, que me tem dado que fazer exemplo: 2 Buttons -- button1 e button2 1 TextBox - textbox1 void TextBox1Leave(object sender, System.EventArgs e) { if(textBox1.Text=="1") { button1.PerformClick(); } if(textBox1.Text=="2") { button2.PerformClick(); } } até aqui funciona 🙂 agora se quiser fazer: void TextBox1Leave(object sender, System.EventArgs e) { button+"textbox1.text" .PerformClick(); } nao vai dar.... Se me pudessem dar umas luzes daquilo que procuro... obg. Link to comment Share on other sites More sharing options...
Hipnoted Posted October 17, 2007 at 05:04 PM Report Share #140821 Posted October 17, 2007 at 05:04 PM hmm... A única linguagem que conheço onde podias fazer algo do género é em PHP, em C# não me parece... Mas posso estar enganado. A primeira forma é a mais correcta de qualquer das maneiras. Posso saber porque estás a tentar fazer dessa forma? "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência" Link to comment Share on other sites More sharing options...
RVG Posted October 17, 2007 at 05:21 PM Author Report Share #140833 Posted October 17, 2007 at 05:21 PM boax... Isto é so um teste.... Porque na realidade, tenho varias texbox, que ao perderem o focus, mediante certas condicoes, realizem certos eventos... recupero o nome da textbox, mediente o sender, e depois, com tratamentos, acho o nome do botao que quero. ate aqui nao ha problemas. ou seja, fico numa variavel texto com o nome do botao. do estilo: string nome="b_sala"; o que eu queria era nome.PerformClick(); claro que isto nao da... ja tentei fazer atraves de "cast" atraves de "Convert.ChangeType" ... mas sem resultados... é que eu tenho este tratamento aparentemente simples, mas que é necessario fazer um sem numero de vezes... Link to comment Share on other sites More sharing options...
Betovsky Posted October 17, 2007 at 05:34 PM Report Share #140838 Posted October 17, 2007 at 05:34 PM void TextBox1Leave(object sender, System.EventArgs e) { String butaoNome = "button" + textbox1.text; if(this.Controls.ContainsKey(butaoNome)) (this.Controls[butaoNome] as Button).PerformClick(); } Convém verificar se no cast não ficas com null, mas presumindo que será sempre um butão (se tu garantes isso) como está deverá funcionar. "Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !" Sign on a computer system consultant's desk Link to comment Share on other sites More sharing options...
RVG Posted October 17, 2007 at 06:13 PM Author Report Share #140860 Posted October 17, 2007 at 06:13 PM boax... obrigados a todos pelas respostas... Betovsky, a tua solucao funciona no exemplo ... 🙂 :) 🙂😛 na aplicacao em si, experimento amanha 🙂 Link to comment Share on other sites More sharing options...
RVG Posted October 18, 2007 at 08:43 AM Author Report Share #141055 Posted October 18, 2007 at 08:43 AM boax... Betovsky 😛 :P 👍 :thumbsup: Funciona na perfeicao .... obg... Link to comment Share on other sites More sharing options...
Betovsky Posted October 18, 2007 at 08:50 AM Report Share #141056 Posted October 18, 2007 at 08:50 AM No prob. Sempre às ordens. :smoke: "Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !" Sign on a computer system consultant's desk Link to comment Share on other sites More sharing options...
RVG Posted October 18, 2007 at 10:29 AM Author Report Share #141060 Posted October 18, 2007 at 10:29 AM boax.. ... tou de volta com mais problmeas ? Coloco aqui a pergunta, por estar no seguimento deste topico... jsalas - form que "herita" doutra, e onde se passam parametros ... 😞 jsalas jns= new jsalas(Par_1,Par_2,Par_3); jns.ShowDialog(); funciona... agora, se quiser que o nome da form de jsalas tambem seja dinamico: "j"+textbox1.text; Se puderes voltar a dar-me luzes ? depois de andar pela net, e depois do teu codigo anterior, cheguei a : string NomeForm="Form1"; Form frm = (Form)Activator.CreateInstance(Type.GetType(NomeForm),true)"; frm.ShowDialog(); so que isto, compila, mas na execucao diz-me o o type é null ... Link to comment Share on other sites More sharing options...
Betovsky Posted October 18, 2007 at 10:47 AM Report Share #141065 Posted October 18, 2007 at 10:47 AM Não percebi o que queres. Queres criar um jsalas e mudar a propriedade "Name" dele para um valor definido numa textbox? Se for isso é simples. String nomeForm = "Form1"; Jsalas jns = new Jsalas(par1, par2, par3); jns.Name = nomeForm; É isto que queres? Se não é, então explica melhor porque não percebi o que querias fazer. Em relação ao GetType é claro que dá null. Se calhar queres é fazer GetType("Windows.Forms.Form") ? Mas isso não tem lógica, só usas isto quando não sabes com que tipo estás a trabalhar, por exemplo em programação genérica. Neste caso sabes que é um Form, logo podes fazer um "new Form" directamente. "Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !" Sign on a computer system consultant's desk Link to comment Share on other sites More sharing options...
RVG Posted October 18, 2007 at 11:11 AM Author Report Share #141068 Posted October 18, 2007 at 11:11 AM boax... e obrigado pela tua ajuda 😛 relendo o meu post anterior, vejo que nao é muito claro... misturei duas coisas ? quando falo em jsalas ... isso é no programa quando falo em Form1 , é no teste... o que se passa é o seguinte.... tenho varias forms, e em cada uma delas tenho varios butoes.... nos eventos onclick de cada butao, tenho exacatemente o mesmo codigo para todos, a unica diferenca é na form que vai chamar : butao1 - nome : b_salas onclick, vai abrir a form j_salas. butao2 - nome: b_edificios onclick, vai abrir a form j_edificios. ou seja, tenho varios eventos onclik, com o codigo quase igual, onde a unica diferenca é a form que vai abrir. queria eliminar isso tudo, e num so evento, tratar de tudo. para isso precisava de "compor" o nome da form a chamar, algo parecido com os posts iniciais.... em vez de ter j_salas jns= new j_salas(X,Y,X); conseguir, que neste caso, "salas" seja dinamico, para poder substituir por "edificios" ou por outra palavra que seja necessario.... mas desde ja, obrigado pelo teu interresse.. Link to comment Share on other sites More sharing options...
Betovsky Posted October 18, 2007 at 12:07 PM Report Share #141079 Posted October 18, 2007 at 12:07 PM Ahh oky, já percebi. Sim isso é possivel e bastante simples até. Existem várias maneiras de fazer isso. Aqui vai uma delas, secalhar a menos complexa. Primeiro metes o evento do click dos butões para a mesma função. Esse é a intenção certo? Segundo. No objecto Button (e em qualquer Control) existe uma propriedade "Tag". Essa propriedade serve mesmo para associar qualquer tipo de informação a um control. No nosso caso vais associar ao Form que queres abrir, que será o nome dele. Ou seja, no botão que irá abrir as j_salas, a propriedade Tag irá ter a string "j_salas". Este valor tem que ser exactamente o nome da Class que queres criar. Depois o código da função será private button_click(object sender, EventArgs e) { Button b = sender as Button; //Verifica se o evento foi despoletado por um butao if(b != null) { String novoForm = b.Tag.ToString(); // Verifica se o botão tem definido o Form a criar if(!String.IsNullOrEmpty(novoForm)) { Type t = Type.GetType(novoForm); Form f = Activator.CreateInstance(t); // Ou então com parametros, mas não sei o que eles significam o tal X, Y, Z // Form f = Activator.CreateInstance(t, new object[] {X, Y, Z}) as Form; f.Show(); } } } "Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !" Sign on a computer system consultant's desk Link to comment Share on other sites More sharing options...
RVG Posted October 18, 2007 at 02:52 PM Author Report Share #141106 Posted October 18, 2007 at 02:52 PM boax.... esta-me a escapar algo... ? num exemplo simples: 2 forms MainForm e Form1 Na MainForm so temos um butao com a tag a "Form1" no evento onclick if(b != null) { String novoForm = b.Tag.ToString(); // Com um messageBox, confirmei que vem bem carregado // Verifica se o botão tem definido o Form a criar if(!String.IsNullOrEmpty(novoForm)) { Type t = Type.GetType(novoForm); //Tambem experimentei por Type t = Type.GetType("Form1"); Mas continua null MessageBox.Show(Convert.ToString(t)); // ESTA VAZIO, Logo na execucao vai me dar erro por nao poder ser nulo Form f = (Form)Activator.CreateInstance(t); //tive de acrescentar (Form) senao nao compilava... f.Show(); Obg pela atencao.. Link to comment Share on other sites More sharing options...
Betovsky Posted October 18, 2007 at 03:11 PM Report Share #141109 Posted October 18, 2007 at 03:11 PM É porque não estás a referir a class em condições. Para teres a certeza que estás a usar a string correcta faz o seguinte. Para saber a String do nome do Form1. No evento Load mete o seguinte código. private void Form1_Load(object sender, EventArgs e) { MessageBox.Show(this.GetType().Fullname); } O texto que aparecer é o texto que tens de ter na Tag do botão. É por esse nome que a Class é conhecida na Assembly. O usual é ser "Namespace"."ClassName" "Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !" Sign on a computer system consultant's desk Link to comment Share on other sites More sharing options...
RVG Posted October 18, 2007 at 03:44 PM Author Report Share #141118 Posted October 18, 2007 at 03:44 PM boax ... depois de referir correctamente a class e fazendo o teu: Form f = Activator.CreateInstance(t, new object[] {X, Y, Z}) as Form; funciona as mil maravilhas.... 👍 😛 Eu so tenho uma coisa a dizer ..... MUITO; MUITO OBRIGADO ..... Não tenho palavras para te agredecer ... 😛 👍 PS: ja agora, se mais alguem seguiu este tema, as propriedades de jt, deixam de estar acessiveis.... a solucao que achei, gracas a Betovsky foi utilizar os "controls" no meu caso ficou: jt.Controls["panel1"].Controls["l_id_retorno"].Text , para saber o texto de l_id_retorno . Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now