none
Consulta básica RRS feed

  • Pregunta

  • Hola a todos. Soy bastante nuevo en el tema C#, por lo que la pregunta pueda parecer muy básica. Si es así, lo siento.

    Resulta que desde un Button_Click creo dinámicamente un grupo 'n' de TextBox (según un parámetro) cuyos nombres son TextB'n' (número de orden 1, 2, etc.) La creación de dichos TextBox con sus atributos y eventos funciona correctamente.


           
    public void Crear_Caselles(byte NQuadres)
            {
                byte NCasella = 0;
    
                while (NCasella < NQuadres)  //Crear Celdas
                {
                    TextBox TextB = new TextBox();
                    TextB.Location = new Point(Pc, Pf); //posición Columna, Fila  
    
                    TextB.Multiline = true; //permite dimensionar
                    TextB.Height = 40;
                    TextB.Width = 40;
                    NomTxt = "TxtBox" + NTxtB.ToString();
                    TextB.Name = NomTxt;
                    TextB.Text = "0";
                    TextB.Leave += new EventHandler(TractaCasella_Leave);   //Evento para cuando cambien valor
    
                    Controls.Add(TextB);    //creación TextBox
    
                    NTxtB++;
                    Pc += TCella;
                    NCasella++;
                    Compt++;
                    Pc += 2;    //sumamos 2 para separarlos
                }
                Pc += 2;
            }


    El problema es que no sé como debo referenciar esos TextBox desde otros puntos del programa.  Por ejemplo, para cambiar el contenido del elemento 7 suponía que debía ser algo así: TextB[7].Text = 'x'.

    El compilador lo admite pero en tiempo de ejecución no funciona. Ejemplo:

         
            private void Prueba()
            {
                TextB[7].Text = "hola";
            }

    Error ==> System.NullReferenceException: 'Object reference not set to an instance of an object.'

    Gracias!


    domingo, 6 de septiembre de 2020 20:07

Respuestas

  • Hola, puedes realizar lo siguiente utilizando Linq

    var textBox7 = this.Controls.OfType<TextBox>().Select(txt => txt.Name == "TextBox7");


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Marcado como respuesta EricRRModerator sábado, 12 de septiembre de 2020 0:51
    martes, 8 de septiembre de 2020 22:28
    Moderador

Todas las respuestas

  • Hola Jordi Fornés, 

      

    Gracias por levantar tu consulta en los foros de MSDN. Has podido solucionar este error?

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN.   

    Eric Ruiz

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    lunes, 7 de septiembre de 2020 17:09
    Moderador
  • Hola. No lo he podido solucionar. De momento no tengo ninguna respuesta a este tema
    martes, 8 de septiembre de 2020 17:57
  • Hola, puedes realizar lo siguiente utilizando Linq

    var textBox7 = this.Controls.OfType<TextBox>().Select(txt => txt.Name == "TextBox7");


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Marcado como respuesta EricRRModerator sábado, 12 de septiembre de 2020 0:51
    martes, 8 de septiembre de 2020 22:28
    Moderador
  • Como he comentado al principio, soy principiante en el tema pero averiguaré como funciona LinQ y sus posibilidades.

    Gracias Sergio!

    miércoles, 9 de septiembre de 2020 6:39