Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: CrÄsH en 11 Enero 2009, 01:36 am



Título: Ayuda C#, problema con win forms
Publicado por: CrÄsH en 11 Enero 2009, 01:36 am
Hola, aver si consigo explicarme bien;

tengo dos formularios en un mismo proyecto, el principal i el secundario, y quiero pasa datos del secundario al principal, para pasar datos del principal al secundario he hecho lo siguiente:

He puesto esto en un boton del form principal:
     Form f = new FormSecundario(datos);
     f.show();
I en el form secundario:
   public FormSecundario(tipo datos);

Hasta aki funciona, pero intento hacer lo mismo intentado pasar datos del secundario al principal:
He puesto esto en un boton del form secundario:
     Form f = new FormPrincipal(datos);

I en el form principal:
   public FormPrincipal(tipo datos);

 y me sale un error:

'Proyecto.FormPrincipal' no contiene un constructor que tome argumentos '0'   

i al pulsarlo me envia al Program.cs(por defecto), es decir, al main(), y conecretamente me marca:

    Application.Run(new FormPrincipal());

Como lo puedo hacer para poderlo hacer igual k del principal al secundario??

Gracias!!






Título: Re: Ayuda C#, problema con win forms
Publicado por: Mace Windu en 11 Enero 2009, 15:16 pm
¿Has oído hablar del patrón Singleton? Puede qué eso de solución a tu problema ;).

http://es.wikipedia.org/wiki/Singleton (http://es.wikipedia.org/wiki/Singleton)

Salu2


Título: Re: Ayuda C#, problema con win forms
Publicado por: CrÄsH en 11 Enero 2009, 17:06 pm
Mace Windu : gracias por tu respuesta pero no llego a tanto y me e kedado igual.


Título: Re: Ayuda C#, problema con win forms
Publicado por: Mace Windu en 11 Enero 2009, 17:26 pm
Bien, déjame un rato que cree un pequeño código para que te sirva de ejemplo y lo publico :).

Edit:

Tal cómo te prometí, aquí lo tienes. He simplificado la tarea, mediante la creación de una variable pública. Cada formulario tiene un botón y un cuadro de textol. Espero que era esto lo que intentabas hacer

Form1
Código
  1. using System;
  2. using System.Windows.Forms;
  3.  
  4. namespace WindowsFormsApplication1
  5. {
  6.    public partial class Form1 : Form
  7.    {
  8.        public static string Titulo;
  9.  
  10.        public Form1()
  11.        {
  12.            InitializeComponent();
  13.        }
  14.  
  15.        private void button1_Click(object sender, EventArgs e)
  16.        {
  17.            Titulo = textBox1.Text;
  18.            Form2 frmForm2 = new Form2();
  19.            frmForm2.Show();
  20.        }
  21.  
  22.        private void Form1_DoubleClick(object sender, EventArgs e)
  23.        {
  24.            this.Text = Titulo;
  25.        }
  26.    }
  27. }

Form2
Código
  1. using System;
  2. using System.Windows.Forms;
  3.  
  4. namespace WindowsFormsApplication1
  5. {
  6.    public partial class Form2 : Form
  7.    {
  8.        public Form2()
  9.        {
  10.            InitializeComponent();
  11.        }
  12.  
  13.        private void Form2_Load(object sender, EventArgs e)
  14.        {
  15.            this.Text = WindowsFormsApplication1.Form1.Titulo;
  16.        }
  17.  
  18.        private void button1_Click(object sender, EventArgs e)
  19.        {
  20.            WindowsFormsApplication1.Form1.Titulo = textBox1.Text;
  21.            this.Close();
  22.        }
  23.    }
  24. }

Salu2


Título: Re: Ayuda C#, problema con win forms
Publicado por: CrÄsH en 11 Enero 2009, 22:53 pm
Gracias, una duda, Form1_DoubleClick que es? pq lo k me pasa es k nc donde poner el this.Text = Titulo; (en el caso de este codigo), pq kuando se cierra el Form2 como lo hago para k lea el this.Text = Titulo; en el Form1.



Título: Re: Ayuda C#, problema con win forms
Publicado por: BETA_V en 12 Enero 2009, 04:26 am
Hola ¡¡¡ lo que podes hacer es esto¡¡

en la declaracion del form2

Código
  1.        Form1 frm;
  2.        public Form2()
  3.        {
  4.            InitializeComponent();
  5.        }
  6.  
  7.  
  8. //Definimos otro constructor
  9.        public Form2(Form1 frm1)
  10.        {
  11.            frm = new Form1();
  12.            frm = frm1;
  13.            InitializeComponent();          
  14.        }
  15.  
  16. //ahora que tenemos instanciado el form1,podemos acceder a sus propiedades y //metodos
  17.  

y cuando llamemos al form2 desde el form1 lo hacemos de esta manera

Código
  1.           //el this seria el form1
  2.            Form2 f = new Form2(this);
  3.            f.Show();
  4.  

espero que te haya sido de ayuda


Título: Re: Ayuda C#, problema con win forms
Publicado por: CrÄsH en 12 Enero 2009, 22:52 pm
Lo k necesito es k al pulsar un boton del Form2  me cree un ListBox en el Form1, con valores del Form2.


Título: Re: Ayuda C#, problema con win forms
Publicado por: BETA_V en 12 Enero 2009, 23:34 pm
de la manera que te indique yo lo podes hacer ;D¡¡¡ podes acceder a los controles ,metodos .... del form1

lo unico que me olvide.es que tener que cambiar el modificador de acceso, del control en cuestion,en el form 1,precisamente en  Nombre_de_archivo_donde_tenes_el_control.Designer.cs

por ej:

Código
  1.  private System.Windows.Forms.Label label1;
  2.  //lo hacemos publico
  3.  public System.Windows.Forms.Label label1;
  4.  
y ahi podemos acceder al control del form1 desde el form2.

un ejemplo sencillo, cambiamos el contenido del label del form1, desde el form2

Código
  1. private void button1_Click(object sender, EventArgs e)
  2.        {
  3.            frm.label1.Text="hola";
  4.        }
  5.  


Título: Re: Ayuda C#, problema con win forms
Publicado por: CrÄsH en 13 Enero 2009, 01:52 am
Gracias BETA_V , pero no lo acabo de entender tu ejemplo, o mejor dicho, no se como aplicarlo al problema k tengo, con el ejemplo k me muestras.

El ejemplo de Mace Windu lo entenia mejor, lo unico k me faltaba era saber como hacerlo para k al cerrar el Form2, pues en el Form1 me leiera esto this.Text = Titulo;(en el caso de su codigo), sin tener k pulsar nada. ya k tengo k conseguir k despues de cerrar el Form2 mediante un boton, pues en el Form1 se me cree un listbox, lleno de los datos(tabla de strings) del Form2;

Gracias



Título: Re: Ayuda C#, problema con win forms
Publicado por: BETA_V en 13 Enero 2009, 04:20 am
hola que tal¡¡¡¡
te paso el codigo,entero para que veas como queda¡¡¡

este seria el codigo del form1 en donde esta el listbox
Código
  1. public partial class Form1 : Form
  2.    {
  3.        public Form1()
  4.        {
  5.            InitializeComponent();
  6.        }
  7.  
  8.        private void button1_Click(object sender, EventArgs e)
  9.        {
  10.            Form2 f = new Form2(this);
  11.            f.Show();
  12.        }
  13.    }
  14.  

ahora cambiamos la visibilidad del list box y lo ponemos como publico,ya que al ser privado no podremos acceder a el desde el form2,esta modificacion seria en el archivo Form1.Designer.cs

Código
  1.  
  2.        #region Windows Form Designer generated code
  3.  
  4.        ///
  5.        #endregion
  6.        //al list box lo ponemos como publico
  7.        public System.Windows.Forms.ListBox listBox1;
  8.        private System.Windows.Forms.Button button1;
  9.  

y la parte final el codigo del form2

Código
  1.    public partial class Form2 : Form
  2.    {
  3.        Form1 frm;
  4.        public Form2()
  5.        {
  6.            InitializeComponent();
  7.        }
  8.  
  9.        public Form2(Form1 frm1)
  10.        {
  11.            frm = new Form1();
  12.            frm = frm1;
  13.            InitializeComponent();
  14.        }
  15.  
  16.        private void button1_Click(object sender, EventArgs e)
  17.        {
  18. //agregamos datos en el listbox del form1
  19.            frm.listBox1.Items.Add("hola");
  20.            frm.listBox1.Items.Add("que");
  21.            frm.listBox1.Items.Add("tal");
  22.            Close();
  23.  
  24.        }
  25.    }
  26.  
  27.  
espero que te sea de ayuda ,cualquier duda pregunta,para eso esta el foro.


Título: Re: Ayuda C#, problema con win forms
Publicado por: CrÄsH en 13 Enero 2009, 20:36 pm
Gracias!! eso era lo k necitava, ponerlo a publico.


Título: Re: Ayuda C#, problema con win forms
Publicado por: CrÄsH en 14 Enero 2009, 00:14 am
Mejor abro otro post para preguntar otra cosa enves de hacerlo aki.
Ya k esto ya esta solucionado!!


Título: Re: Ayuda C#, problema con win forms
Publicado por: Guiegar en 15 Febrero 2009, 07:16 am
Hola que tal... no se si ya resolviste tu problema con los win form pero igual te pongo el siguiente ejemplo que creo te puede ayudar en alguna otra ocasion...


FORMULARIO 1

El primer formulario tiene un TextBox llamado "txtDato" y un boton llamado "btnEnviar". La idea es que cuando presiones el boton, el texto que hayas escrito en el "txtDato" pasara al segundo formulario y lo visualizara dentro de otro textbox. Ok, el código de este primer formulario es el siguiente
---------------------------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnEnviar_Click(object sender, EventArgs e)
        {
            //Creamos un objeto de tipo "Forulario 2" y pasamos un valor al contructor
            //del formulario 2
            Form2 frm = new Form2(txtDato.Text);

            //Abrimos (Ejecutamos) el formulario en forma "Modal"
            frm.ShowDialog();

            //La siguientes instrucciones no se ejecutaran sino hasta despues de que
            //se haya cerrado la ventana del forulario 2
           
            //Asignamos a nuestro control el valor de la variable publica de
            //del formulario 2 "Valor".
            txtDato.Text = frm.Valor;
        }
    }
}

-------------------------------------------------------------------------------------

FORMULARIO 2

Ahora, en el segundo formulario tambien hay un Textbox llamado "txtValor" y un boton llamado "btnRegresar"... entonces el valor que enviaste desde el formulario 1 sera recibido dentro del contructor del formulario 2 y este será guardado en una variable publica de tipo string para despues ser mostrada. El codigo del forulario 2 es :

-------------------------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form2 : Form
    {
        // Variable publica para guardar el valor que se recibimos del formulario 1
        // y para guardar el valor que vamos a devolver al formulario 1
        public string Valor;

        //Como puedes ver, aqui estoy sobrecargando el contructor del formulario
        public Form2(string Dato)
        {
           
            //El valor que recibimos del formulario 1 lo guardamos dentro de nuestra
            //variable publica
            this.Valor = Dato;
            InitializeComponent();
        }

        //Si deseas, este contructor lo puedes quitar o dejarlo
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            //Una vez que nuestro formulario se haya cargado, ahora si, mostramos el
            // valor que guardamos en nuestra variable publica
            txtValor.Text = Valor;
        }

        private void btnRegresar_Click(object sender, EventArgs e)
        {
            //Ahora, antes de cerrar el forulario 2, asignamos a nuestra variable
            //publica el valor que queremos ver dentro del formulario 1
            this.Valor = txtValor.Text;

            //cerramos el formulario 2
            this.Close();
        }
    }
}

Bueno, espero y aun te sirva este ejemplo y sobre todo que me hayas podido explicar  ;D