elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Validar varios textbox con un grado de complejidad adicional
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Validar varios textbox con un grado de complejidad adicional  (Leído 2,583 veces)
fr3n3tic

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Validar varios textbox con un grado de complejidad adicional
« en: 15 Septiembre 2014, 06:42 am »

Muy buenas a todos.
Antes de plantear mi consulta, les cuento que estoy haciendo una aplicación windows form en VB.NET 2012 conectada a una base de datos sql server, ahora me encuentro en la etapa de validaciones y si bien puedo hacerla control por control, son muchossss como para hacerlo uno por uno.

A continuación explico todo con imágenes para que quede claro:
Imagen 1:

https://www.dropbox.com/s/m7yutkk5znrpx13/1.JPG?dl=0

En la imagen 1 se aprecia un tab panel llamado "Respuestas correctas" que agrega preguntas de manera dinámica según lo que se indique en el combobox "N° Preguntas" y valida el número de alternativas en el combobox "N° Alternativas", esto está funcionando bien, cuando elijo el número de preguntas se agregan las filas con las preguntas de la forma nombrecontrol.visible = false o true según quiera esconderala o mostrarla y el número de alternativas pueden ser 3, 4 o 5 y las valido con keypress asignando el ascci a las letras que puede agregar el usuario (si son 3, ABC, si son 4 ABCD, si son 5 ABCDE).

El problema de validación que tengo ahora viene en la imagen 2, y tiene que ver con lo siguiente:

Puedo agregar hasta 90 preguntas, y lo que busco es deshabilitar todos los textbox y dejarlos gris exceptuando el que corresponde a la alternativa que eligió el usuario, me explico, si el usuario elige la alterntiva C en la pregunta 50, debiera en la fila 50 solo activarse el textbox abajo del número 3, si elige el D, se activa el textbox del número 4 y así según corresponda la alternativa elegida por el user y que en la que queda activa aparezca el número 1 por defecto (cómo valor numérico, no alfanumérico). El tema es que tendría que hacer esto por cada pregunta puediendo partir en 10 y hasta 90 en bloques de 5 en 5 lo que encuentro es mucho para validar uno a uno. Tengo un panel que agrupa las 10 primera preguntas y luego varios paneles que agrupan preguntas de 5 en 5 hasta llegar a 90, esto me permite mostrar o esconder según la elección de preguntas que haga el usuario.

Otro tema, es que cuando presiono el botón que está entre el checkbox y el último textbox de cada pregunta, me debiese habilitar todos los textbox de esa fila y si presiono el checkbox debiese bloquear todos los textobx de esa fila y dejarlos en cero o limpios cada caja de esa fila.

Aquí va la segunda imagen de referencia.
https://www.dropbox.com/s/pvll2wybxcx3x89/2.jpg?dl=0

TY


« Última modificación: 15 Septiembre 2014, 07:09 am por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.811



Ver Perfil
Re: Validar varios textbox con un grado de complejidad adicional
« Respuesta #1 en: 15 Septiembre 2014, 08:39 am »

Buenas

1) Las imágenes no se veian, te he editado el post para que al menos se vean las urls, pero creo que no te costaba nada revisar el post que escribiste por ti mismo.

2) Me da la sensación de que estás utilizando el framework de DotNetBar ya que el Form es idéntico al de las plantillas que proporcionan, bueno, obviamente estás utilizando un set de controles profesionales ya sea DotNetBar, Telerik, DevExpress, o etc., y lo que quiero decir con esto es que dichas herramientas profesionales suelen traer mucho más que los propios controles, como métodos de validacion para ciertas tareas, incluso podría haber algún custom ErrorProvider, etc, no te vendría mal preguntar al soporte de la compañia en cuestión para verificar si proporcionan algo en el paquete que te pueda ser útil para resolver el problema que tienes, el cual no se si he llegado a comprender muy bien.

Puedo agregar hasta 90 preguntas, y lo que busco es deshabilitar todos los textbox y dejarlos gris exceptuando el que corresponde a la alternativa que eligió el usuario, me explico, si el usuario elige la alterntiva C en la pregunta 50, debiera en la fila 50 solo activarse el textbox abajo del número 3, si elige el D, se activa el textbox del número 4 y así según corresponda la alternativa elegida por el user y que en la que queda activa aparezca el número 1 por defecto (cómo valor numérico, no alfanumérico). El tema es que tendría que hacer esto por cada pregunta puediendo partir en 10 y hasta 90 en bloques de 5 en 5 lo que encuentro es mucho para validar uno a uno. Tengo un panel que agrupa las 10 primera preguntas y luego varios paneles que agrupan preguntas de 5 en 5 hasta llegar a 90, esto me permite mostrar o esconder según la elección de preguntas que haga el usuario.

Otro tema, es que cuando presiono el botón que está entre el checkbox y el último textbox de cada pregunta, me debiese habilitar todos los textbox de esa fila y si presiono el checkbox debiese bloquear todos los textobx de esa fila y dejarlos en cero o limpios cada caja de esa fila.

Sinceramente, ¿en serio esperas poder recibir ayuda cualificada sin mostrar parte de tú código?, para empezar no sabemos de que manera estás generando los controles dinamicamente por ejemplo el nombre dinámico que les estás asignando (si alguno), pero al instanciar los textboxes, los checkboxes, y los botones, deberías añadirle un Tag a cada control haciendo referencia a la fila en cuestión donde los estás agregando, y así no tendrías dificultades para desactivar los textboxes de una fila en concreto.

No se si esto es lo que buscas, pero creo que podrás adaptarlo a tus necesidades.

Ejemplo:


Source:
Código
  1. Public Class Form1
  2.  
  3.    ''' <summary>
  4.    ''' Initializes a new instance of the <see cref="Form1"/> class.
  5.    ''' </summary>
  6.    Public Sub New()
  7.  
  8.        ' This call is required by the designer.
  9.        InitializeComponent()
  10.  
  11.        ' Add any initialization after the InitializeComponent() call.
  12.        Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedSingle
  13.        Me.StartPosition = FormStartPosition.CenterScreen
  14.        Me.MaximizeBox = False
  15.  
  16.    End Sub
  17.  
  18.    ''' <summary>
  19.    ''' Handles the Load event of the Form1.
  20.    ''' </summary>
  21.    Private Shadows Sub Load() Handles MyBase.Load
  22.  
  23.        Me.CreateRowsOfControls(RowsCount:=5I)
  24.  
  25.    End Sub
  26.  
  27.    ''' <summary>
  28.    ''' Creates the controls.
  29.    ''' </summary>
  30.    ''' <param name="RowsCount">The amount of rows of controls to generate.</param>
  31.    Private Sub CreateRowsOfControls(ByVal RowsCount As Integer)
  32.  
  33.        Me.SuspendLayout()
  34.  
  35.        For row As Integer = 1I To RowsCount
  36.  
  37.            For num As Integer = 1I To 5I
  38.  
  39.                Dim tb As New TextBox With
  40.                    {
  41.                        .Name = String.Format("tb_{0}.{1}", CStr(row), CStr(num)),
  42.                        .Size = New Size(15I, 20I),
  43.                        .Location = New Point((15I * num) + (2I * num), (20I * row) + (5I * row)),
  44.                        .Tag = row
  45.                    }
  46.  
  47.                Me.Controls.Add(tb)
  48.  
  49.            Next num
  50.  
  51.            Dim bt As New Button With
  52.                {
  53.                    .Name = String.Format("bt_{0}", CStr(row)),
  54.                    .Size = New Point(120I, 20I),
  55.                    .Text = String.Format("Desactivar fila nº{0}", CStr(row)),
  56.                    .Location = New Point(Me.Controls(String.Format("tb_{0}.{1}", CStr(row), CStr(RowsCount))).Right + 5I, (20I * row) + (5I * row)),
  57.                    .Cursor = Cursors.Hand,
  58.                    .Tag = New Object() {row, True}
  59.                }
  60.  
  61.            AddHandler bt.Click, AddressOf bt_Click
  62.  
  63.            Me.Controls.Add(bt)
  64.  
  65.        Next row
  66.  
  67.        Me.ResumeLayout()
  68.  
  69.    End Sub
  70.  
  71.    ''' <summary>
  72.    ''' Handles the Click event of the bt controls.
  73.    ''' </summary>
  74.    ''' <param name="sender">The source of the event.</param>
  75.    ''' <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
  76.    Private Sub bt_Click(ByVal sender As Object, ByVal e As EventArgs)
  77.  
  78.        Dim bt As Button = DirectCast(sender, Button)
  79.        Dim Row As Integer = DirectCast(bt.Tag(0I), Integer)
  80.        Dim Disable As Boolean = DirectCast(bt.Tag(1I), Boolean)
  81.  
  82.        Dim tbNamePattern As String = String.Format("tb_{0}.", CStr(Row))
  83.  
  84.        Me.SuspendLayout()
  85.  
  86.        Select Case Disable
  87.  
  88.            Case True ' Desactivar controles
  89.  
  90.                bt.Text = String.Format("Activar fila nº{0}", CStr(Row))
  91.                bt.Tag = New Object() {Row, Not Disable}
  92.  
  93.                ControlIterator.Disable(Of TextBox)(Me.Controls, tbNamePattern)
  94.  
  95.                ControlIterator.PerformAction(Of TextBox)(Me.Controls,
  96.                                                          Sub(tb As TextBox)
  97.                                                              tb.BackColor = Color.Black
  98.                                                          End Sub,
  99.                                                          ContainsName:=tbNamePattern)
  100.  
  101.            Case Else ' Activar controles
  102.  
  103.                bt.Text = String.Format("Desactivar fila nº{0}", CStr(Row))
  104.                bt.Tag = New Object() {Row, Not Disable}
  105.  
  106.                ControlIterator.Enable(Of TextBox)(Me.Controls, tbNamePattern)
  107.  
  108.                ControlIterator.PerformAction(Of TextBox)(Me.Controls,
  109.                                                          Sub(tb As TextBox)
  110.                                                              tb.BackColor = SystemColors.Window
  111.                                                          End Sub,
  112.                                                          ContainsName:=tbNamePattern)
  113.  
  114.        End Select ' Disable
  115.  
  116.        Me.ResumeLayout()
  117.  
  118.    End Sub
  119.  
  120. End Class

Como te habrás dado cuenta uso una class llamada 'Control Iterator', es una Class que escribí hace tiempo que te puede servir para el propósito del primer problema y del segundo problema, el código es demasiado largo así que aqui te lo dejo en un enlace externo:

Control Iterator for VB.Net (15-Sep-2014)

Saludos.


« Última modificación: 15 Septiembre 2014, 09:01 am por Eleкtro » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Comgenerar varios TextBox
Programación Visual Basic
yonky_85 1 1,022 Último mensaje 4 Septiembre 2006, 19:53 pm
por Hans el Topo
Validar textbox numerico en C# « 1 2 »
.NET (C#, VB.NET, ASP)
oscarj24 16 35,448 Último mensaje 20 Abril 2010, 05:16 am
por oscarj24
consulta sobre pasar varios argumentos a un ejecutable de un textbox
.NET (C#, VB.NET, ASP)
ahaugas 3 2,850 Último mensaje 12 Enero 2013, 13:56 pm
por ahaugas
insert de de varios textbox auna base de datos
PHP
proteus8 0 1,679 Último mensaje 5 Febrero 2013, 20:50 pm
por proteus8
Agregar datos de una BD a varios TextBox
.NET (C#, VB.NET, ASP)
SlayerBur 0 1,953 Último mensaje 14 Julio 2019, 16:05 pm
por SlayerBur
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines