Domingo 22 de Diciembre de 2024, 14:29
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
CLR: .Net / Mono / Boo / Otros CLR
»
C#
(Moderador:
ProfesorX
) »
eventos entre forms
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: eventos entre forms (Leído 3416 veces)
ciberjuanma
Nuevo Miembro
Mensajes: 10
eventos entre forms
«
en:
Jueves 8 de Enero de 2009, 08:54 »
0
hola, mi problema es el siguiente. tengo dos forms. en el form1 tengo un textbox y un botón. en el form2 tengo un listbox. mi duda es: como hago para generar un evento en el boton del form1 que me cargue lo que ingrese en el textbox, en el listbox del form2. no se como hacer un evento que me modifique datos en otra ventana. a quien me pueda ayudar se lo agradeceria muchisimo.
Tweet
psikotic
Nuevo Miembro
Mensajes: 12
Re: eventos entre forms
«
Respuesta #1 en:
Domingo 11 de Enero de 2009, 00:25 »
0
La forma mas recomedada es a traves de una propiedad publica en el Form2, que actualizas en el evento del boton del Form1. Pero para hacerlo exactamente como dices puedes intentar lo siguiente:
Código: Text
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// creas los Forms que necesitas para el intercambio de información
Form1 mF1 = new Form1();
Form2 mF2 = new Form2();
// codigo para manejar el evento click del boton en el Form1
mF1.btnSend.Click += new EventHandler(delegate (object sender, EventArgs e)
{
// accedes a los miembros que deseas modificar del Form2
mF2.lstData.Items.Add(mF1.txtData.Text);
// mostrar el Form2, si es que no esta visible
mF2.Visible = true;
});
// Inicias la aplicación
Application.Run(mF1);
}
debes poner el listbox, textbox y el button como publicos, de ahi la recomendación de hacerlo mejor con propiedades y mantener la encapsulación
ciberjuanma
Nuevo Miembro
Mensajes: 10
Nueva Consulta: eventos entre forms
«
Respuesta #2 en:
Martes 13 de Enero de 2009, 07:52 »
0
ok, te agradezco muchisimo la respuesta, mi problema es el siguiente: Mi form1() esta activo en pantalla, o sea es un formulario padre y contiene un boton y un listbox. hago click en el botón btnCargar de este form1() y se me abre el form2() que contiene un textbox para cargar un dato y un boton que genera el Evento para cargar ese dato en un ListBox del form1(). aca va el código:
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Ejemplo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnCargar_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.ShowDialog();
}
}
}
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Ejemplo
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
}
}
}
Desde ya, muy agradecido por tu tiempo. ojalá algún día pueda saber tanto el lenguaje como para enseñar a otro programador inexperto como yo.
E.Baley
Miembro activo
Mensajes: 44
Re: eventos entre forms
«
Respuesta #3 en:
Martes 13 de Enero de 2009, 12:11 »
0
al crear el Form2 pásale una referencia del Form principal
Sería:
Código: Text
private void btnCargar_Click(object sender, EventArgs e) {
Form2 form2 = new Form2(this);
form2.ShowDialog();
}
El Form2, en el constructor, haz que guarde esa referencia en una variable para poder dirigirse a ella en lo sucesivo.
sl2
ciberjuanma
Nuevo Miembro
Mensajes: 10
Consulta: eventos entre forms
«
Respuesta #4 en:
Miércoles 14 de Enero de 2009, 02:54 »
0
te agradezco la respuesta. pero probé y no puedo acceder a los miembros de form1() desde form2() de esa manera, o me gustaria que me muestres el código si podés. sé que no es dificil pero busco por todos lados y no puedo encontrar como generar eventos de este tipo, que modifiquen o ingresen datos desde un form a otro form que esta visible.
E.Baley
Miembro activo
Mensajes: 44
Re: eventos entre forms
«
Respuesta #5 en:
Viernes 16 de Enero de 2009, 09:30 »
0
Veamos
--> El Form1 es el form principal
Código: Text
namespace Ejemplo {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
// Este es el método que crea el form hijo
private void btnCargar_Click(object sender, EventArgs e) {
Form2 form2 = new Form2(this); // --> Así le pasas una referencia al hijo de este form (el principal), para que pueda invocar sus métodos
form2.ShowDialog();
}
// Este es el método que se invocará desde el form hijo
public void HOLA(){
System.Diagnostics.Debug.WriteLine("Hola desde el form hijo");
}
}
}
--> El Form2 es el hijo
Código: Text
namespace Ejemplo {
public partial class Form2 : Form {
Form _formPrincipal; // --> Aquí se guardará la referencia del Form principal que viene en el constructor al instanciar una clase de este objeto
public Form2(Form fp){
_formPrincipal = fp; // --> Aquí guardamos efectivamente esa referencia
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e){
// Ahora ya podemos usar los métodos del Form principal
_formprincipal.HOLA();
}
}
}
E.Baley
Miembro activo
Mensajes: 44
Re: eventos entre forms
«
Respuesta #6 en:
Viernes 16 de Enero de 2009, 09:41 »
0
Acabo de releer la pregunta y veo que la he respondido al revés. Lo que te he respondido sirve para invocar un método del form principal desde el hijo.
de todas formas, para hacerlo al revés verás que es muy fácil, y el sistema es el mismo.
Ahora lo que debes hacer es guardar una referencia del form hijo en el principal, e invocar sus métodos de la misma forma.
por ejemplo, te creas una variable :
Form _formHijo;
y asignas su contenido en el momento de crear el hijo:
_formHijo = new Form2(this);
_formHijo.ShowDialog();
Ahora ya la tienes guardada y puedes hacer, desde otro botón:
_formHijo.RellenaListBox(miTextBox.Text);
y el hijo debe recoger ese dato en el método RellenaListBox(string elTexto) y añadirlo al ListBox correspondiente.
saludos
ciberjuanma
Nuevo Miembro
Mensajes: 10
Re: eventos entre forms
«
Respuesta #7 en:
Viernes 16 de Enero de 2009, 19:54 »
0
Muchisimas gracias por la ayuda. en mi programa debía hacer click en el botón del form1 y se abria el form2 luego debía ingresar un texto en el form2 y presionar el boton, y luego se cargaba el contenido del textbox en el listbox del form1. aca va el código.
using System.IO;
using System.Windows.Forms;
namespace Eventos
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void lnkInsertar_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Form2 form2 = new Form2(this);//creo el form2 y le paso el form1 como parametro al constructor
form2.ShowDialog();
}
using System.Windows.Forms;
namespace Eventos
{
public partial class Form2 : Form
{
private Form1 form1;//creo la variable de tipo form1 para utilizarla para acceder a las propiedades del form1
public Form2()
{
InitializeComponent();
}
public Form2(Form1 form)
{
InitializeComponent();
form1 = form; //cargo la variable form1 con el form que le pase como parametro al constructor para poder acceder a las propiedades de form1
}
private void lnkInsertar_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
if (txtboxNombre.Text != "")
{
//verifica si el elemento ingresado en el textbox1 del form2() no se encuentra en el listbox del form1()
if (!((ListBox)form1.Controls["lstbxNombres"]).Items.Contains(txtboxNombre.Text)) //c
on ((tipocontrol)form1.Controls["nombrecontrol"]).TipoMetodo logro acceder a los metodos del control "nombre control" del form1
{
if (((ListBox)form1.Controls["lstbxNombres"]).Items.Count == 0)
((ListBox)form1.Controls["lstbxNombres"]).Items.Insert(0, txtboxNombre.Text);
else
((ListBox)form1.Controls["lstbxNombres"]).Items.Add(txtboxNombre.Text);
}
else
MessageBox.Show("El contacto ya existe en la lista", "Error al cargar contacto", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
this.Close();
}
}
}
Neopro
Miembro MUY activo
Mensajes: 316
Re: eventos entre forms
«
Respuesta #8 en:
Sábado 17 de Enero de 2009, 04:41 »
0
Es mas recomendable hacerlo con eventos delegate.
[size=109]
"Has lo que digo y no hagas lo que hago"
[/size]
ciberjuanma
Nuevo Miembro
Mensajes: 10
Re: eventos entre forms
«
Respuesta #9 en:
Domingo 18 de Enero de 2009, 19:42 »
0
Acá esta el mismo código pero hecho con eventos y delegados. Mil gracias por su ayuda.
using System;
using System.Windows.Forms;
namespace EventosFormsDelegados
{
public delegate void Handler(string texto);
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.TextoEnviado += new Handler(InsertarTextoEnLista);
form2.ShowDialog();
}
public void InsertarTextoEnLista(string texto)
{
if (!EstaEnLista(texto))
listBox1.Items.Add(texto);
else
MessageBox.Show("El Contacto ya esta en la lista", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
private bool EstaEnLista(string texto)
{
if (listBox1.Items.Contains(texto))
return true;
else
return false;
}
}
}
using System;
using System.Windows.Forms;
namespace EventosFormsDelegados
{
public partial class Form2 : Form
{
public event Handler TextoEnviado;
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
TextoEnviado(textBox1.Text);
}
}
}
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
CLR: .Net / Mono / Boo / Otros CLR
»
C#
(Moderador:
ProfesorX
) »
eventos entre forms