Estoy trabajando en un programa de C#, y ahora mismo tengo uno Form y un par de clases. Me gustaría ser capaz de acceder a algunos de los Form controles (como un TextBox) de mi clase. Cuando intento cambiar el texto en el TextBox de mi clase me sale el siguiente error:

Un objeto de referencia es necesario para la no-estática de campo, el método o la propiedad ‘del Proyecto.Form1.txtLog’

¿Cómo puedo acceder a los métodos y controles que están en Form1.cs de una de mis clases?

InformationsquelleAutor user13504 | 2008-10-20

8 Comentarios

  1. 29

    Usted está tratando de acceder a la clase como opuesto al objeto. Esa declaración puede ser confuso para los principiantes, pero, efectivamente, estás tratando de abrir la puerta de su casa a recoger a la puerta de su casa de los planes.

    Si usted realmente desea tener acceso a los componentes de formulario directamente a partir de una clase (que no) tendría que usar la variable que se crea una instancia de su forma.

    Dependiendo de la forma que usted desea ir usted estaría mejor de envío el texto de un control o lo que sea a un método en sus clases por ejemplo

    public void DoSomethingWithText(string formText)
    {
       //do something text in here
    }

    o la exposición de las propiedades en la clase de formulario y la configuración de la forma de texto en el que hay – por ejemplo

    string SomeProperty
    {
       get 
       {
          return textBox1.Text;
       }
       set
       {
          textBox1.Text = value;
       }
    }
    • En «textBox1.Texto = valor», donde es el valor que viene de?
    • ¿cómo puedo actualizar la cuadrícula de datos con este método ?
    • «efectivamente le estás tratando de abrir la puerta de su casa a recoger a la puerta de su casa de los planes». No tiene precio.
  2. 14

    Otra solución sería la de pasar el cuadro de texto (o de control que desea modificar) en el método que se va a manipular como un parámetro.

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            TestClass test = new TestClass();
            test.ModifyText(textBox1);
        }
    }
    
    public class TestClass
    {
        public void ModifyText(TextBox textBox)
        {
            textBox.Text = "New text";
        }
    }
    • Pero pasado el control de Forma en el interior de la clase. Es exactamente como usted lo dijo, pero ¿cómo sería la inversa?
  3. 9
    1. usted tiene que tener una referencia a la forma del objeto con el fin de acceder a sus elementos
    2. los elementos tienen que ser declarados públicos en orden para otra clase para acceder a ellos
    3. no hagas esto – su clase tiene que saber demasiado acerca de cómo la forma de aplicación; no exponer a los controles de formulario fuera de la clase del formulario
    4. lugar, hacer públicas las propiedades en el formulario para obtener o establecer los valores que están interesados en
    5. post más detalles de lo que quieres y por qué, suena como usted puede ir en una dirección que no es coherente con la buena encapsulación prácticas
  4. 3

    Usted necesita el acceso al objeto…. usted no puede simplemente pedir a la clase de formulario….

    por ejemplo,…

    que habría hecho algo como

    Form1.txtLog.Text = "blah"

    lugar de

    Form1 blah = new Form1();
    blah.txtLog.Text = "hello"
  5. 2

    Si el formulario se inicia en primer lugar, en el formulario de Carga controlador de podemos crear una instancia de una copia de nuestra clase. Podemos tener propiedades que hacen referencia a cualquiera de los controles que desea hacer referencia. Pasar la referencia a la forma ‘esta’ al constructor de la clase.

    public partial class Form1 : Form
    {
        public ListView Lv
        {
            get { return lvProcesses; }
        }
    
        public Form1()
        {
            InitializeComponent();
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
            Utilities ut = new Utilities(this);
        }
    }

    En su clase, la referencia del formulario se pasa al constructor y se almacena como un miembro privado. Este formulario de referencia se puede utilizar para acceder a las propiedades del formulario.

    class Utilities
    {
        private Form1 _mainForm;
        public Utilities(Form1 mainForm)
        {
            _mainForm = mainForm;
            _mainForm.Lv.Items.Clear();
        }
    }
  6. 1

    Que usted necesita para hacer los miembros de la para la clase de formulario, ya sea público o, si la clase de servicio está en la misma asamblea, interna. Controles de Windows’ la visibilidad puede ser controlado a través de sus Modificadores de propiedades.

    Tenga en cuenta que generalmente se considera una mala práctica explícitamente lazo de la clase de servicio de una interfaz de usuario de la clase. En lugar usted debe crear buenas interfaces entre la clase de servicio y la clase de formulario. Dicho esto, para el aprendizaje o, generalmente, cachondeo, la tierra no spin off de su eje si expone la forma de los miembros de las clases de servicio.

    rp

  7. 1

    Soy relativamente nuevo en c# y marca de nuevo a stackoverflow. De todos modos, con respecto a la pregunta sobre cómo acceder a los controles de un formulario a partir de una clase: acabo de utilizar el ControlCollection (Controles) de la clase del formulario.

            //Add a new form called frmEditData to project.
            //Draw a textbox on it named txtTest; set the text to
            //something in design as a test.
            Form frmED =  new frmEditData();
            MessageBox.Show(frmED.Controls["txtTest"].Text);

    Trabajado para mí, tal vez va a ser de ayuda en ambas preguntas.

  8. 0

    SÓLO USTED PUEDE ENVIAR EL FORMULARIO A LA CLASE COMO ESTA

    Class1 excell = new Class1 (); //you must declare this in form as you want to control
    
    excel.get_data_from_excel(this); //And create instance for class and sen this form to another class

    DENTRO DE LA CLASE COMO CREAR CLASS1

    class Class1
    {
        public void get_data_from_excel (Form1 form) //you getting the form here and you can control as you want
        {
            form.ComboBox1.text = "try it"; //you can chance Form1 UI elements inside the class now
        }
    }

    IMPORTANTE : Pero usted no debe olvidaron que han declarar modificador de las propiedades del formulario como PÚBLICO y se puede acceder de otra manera no se puede ver el control en forma de clase

Dejar respuesta

Please enter your comment!
Please enter your name here