Saltar al contenido principal

 none
No puedo acceder a los controles desde mi clase RRS feed

  • Pregunta

  • Hola a todos, lo que pasa es lo siguiente: tengo un WinForm y le agregue un textBox, este textBox quiero manejarlo desde una clase mia, en anteriores veces lo que hacia era cambiar la propiedad Modifiers a public y despues podia usar el control desde otras clases, pero estaba haciendo lo mismo y no se porque no veo al control desde otra clase que no sea la de Form1. Si alguien tiene alguna idea de que puede ser lo que me esta faltando le agradezco.

    Aclaro que es con todos los controles, pero hablo del textBox para que sea mas general la pregunta.

    Uso el visual studio 2008 y c #

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace EnviarMail
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            public void MyMetodo()
            {
                // aca aparece el textBox
            }
        }
    
        public class otraClase
        {
            public otraClase()
            { }
    
            public void otroMetodo()
            {
                // aca no aparece 
            }
        }
    }

     

     


    www.tootonga.net
    domingo, 11 de abril de 2010 22:02

Respuestas

  • hola pues mira intenta otras cosas:

    1.Ya que tenga su modifier en public lo que pueds hacerle a tu clase externa es hacer que derive de form1, es decir de tu winform, y asi en tu otra clase puedes utilizarlo como si fuera suya.

    class miClase:Form1

    {

    string a= textbox_de_Form1.text;

    }

    2.Otra forma podria ser que instancies  un nuevo objeto de tipo Form1 y con ese nuevo objeto ocupar su textbox.

    class miClase

    {

    Form1 nuevo= new Form1();

    string a= nuevo.textbox.text;

    }

     bueno espero t sirva de algo , auque quizas no es solucion a tu problema pero de algo t ha de servir ( bueno eso creo).

    saludos.

    • Marcado como respuesta micron_82 lunes, 12 de abril de 2010 9:54
    lunes, 12 de abril de 2010 0:02
  • hola

    la verdad no te recomendaria que apliques esta tecnica que describes, no es bueno el accesoa los controles de los formularios directo desde clases u otros formularios

    podrias pasar el control por parametro ya que lo idea seria que trabajes a nicvel de instancia, podria ser algo como esto

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

            public void MyMetodo()
            {
                otraClase otra = new otraClase(TextBox1);
                otra.otroMetodo();
            }
        }

        public class otraClase
        {
            private TextBox _text;
           
            public otraClase(TextBox text)
            {
                _text = text;
            }

            public void otroMetodo()
            {
                //aqui accedes a _text que sera una referencia al
                //control en el otro form
                _text.Text = "se ejecuto otroMetodo()";
            }
        }
    }

     

    igualmente, a mi particularmente no soy muy partidaria de pasar controles de interfaz grafica como parametros a clases que implementan funcionalidad

    por ahi podrias hacer que el metodo otroMetodo() devuelva el resultado procesado al formulario y que este lo asigne al control que crea conveniente

    algo asi es como lo haria yo

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

            public void MyMetodo()
            {
                otraClase otra = new otraClase();
                TextBox1.Text = otra.otroMetodo();
            }
        }

        public class otraClase
        {
            public otraClase()
            { }

            public string otroMetodo()
            {
                return "se ejecuto otroMetodo()";
            }
        }
    }

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta micron_82 lunes, 12 de abril de 2010 9:54
    lunes, 12 de abril de 2010 1:42

Todas las respuestas

  • hola pues mira intenta otras cosas:

    1.Ya que tenga su modifier en public lo que pueds hacerle a tu clase externa es hacer que derive de form1, es decir de tu winform, y asi en tu otra clase puedes utilizarlo como si fuera suya.

    class miClase:Form1

    {

    string a= textbox_de_Form1.text;

    }

    2.Otra forma podria ser que instancies  un nuevo objeto de tipo Form1 y con ese nuevo objeto ocupar su textbox.

    class miClase

    {

    Form1 nuevo= new Form1();

    string a= nuevo.textbox.text;

    }

     bueno espero t sirva de algo , auque quizas no es solucion a tu problema pero de algo t ha de servir ( bueno eso creo).

    saludos.

    • Marcado como respuesta micron_82 lunes, 12 de abril de 2010 9:54
    lunes, 12 de abril de 2010 0:02
  • hola

    la verdad no te recomendaria que apliques esta tecnica que describes, no es bueno el accesoa los controles de los formularios directo desde clases u otros formularios

    podrias pasar el control por parametro ya que lo idea seria que trabajes a nicvel de instancia, podria ser algo como esto

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

            public void MyMetodo()
            {
                otraClase otra = new otraClase(TextBox1);
                otra.otroMetodo();
            }
        }

        public class otraClase
        {
            private TextBox _text;
           
            public otraClase(TextBox text)
            {
                _text = text;
            }

            public void otroMetodo()
            {
                //aqui accedes a _text que sera una referencia al
                //control en el otro form
                _text.Text = "se ejecuto otroMetodo()";
            }
        }
    }

     

    igualmente, a mi particularmente no soy muy partidaria de pasar controles de interfaz grafica como parametros a clases que implementan funcionalidad

    por ahi podrias hacer que el metodo otroMetodo() devuelva el resultado procesado al formulario y que este lo asigne al control que crea conveniente

    algo asi es como lo haria yo

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

            public void MyMetodo()
            {
                otraClase otra = new otraClase();
                TextBox1.Text = otra.otroMetodo();
            }
        }

        public class otraClase
        {
            public otraClase()
            { }

            public string otroMetodo()
            {
                return "se ejecuto otroMetodo()";
            }
        }
    }

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta micron_82 lunes, 12 de abril de 2010 9:54
    lunes, 12 de abril de 2010 1:42
  • Hola Paul D.Luffy , esas dos opciones las habia intentado pero lo que pasa es lo siguiente; en la 1 opcion que me das al heredar la clase de Form ( MiClase : Form )  en realidad me crea un nuevo formulario que no es lo que estoy buscando, y en la segunda opcion; al crear una nueva instancia de la Clase Form1 que es a donde tengo los controles, me da acceso a los controles pero no son los mismos, porque en realidad cree una nueva instancia del Form1. Igualmente agradezco tu ayuda porque me lo explicaste re bien.

     

    Hola Leandro, con respecto a las dos opciones que diste, yo lo habia pensado pero en realidad queria probar con lo que plantee yo para no estar creando tantas instancias y metodos, pero es como decis vos,  no es bueno dejar todo publico, sino estaria perdiendo la encapsulacion de los controles, lo que voy a probar es la primera opcion, porque la segunda se me hace que consume muchos recursos al llamar a varios metodos para hacer una cosa simple.

     

    Gracias a los dos por las respuestas.


    www.tootonga.net
    lunes, 12 de abril de 2010 9:54