Autor Tema: activar un evento para un conjunto de componentes  (Leído 8161 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
activar un evento para un conjunto de componentes
« en: 26 de Febrero de 2009, 19:17:07 »

hola.como puedo simplificar lo de abajo?me refiero a no tener que nombrar tantos condicionales para modificar la propiedad de los botones.


Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If MSComm1.PortOpen = True Then Command9.Enabled = False
If MSComm1.PortOpen = False Then Command9.Enabled = True

If MSComm1.PortOpen = False Then Command1.Enabled = False
If MSComm1.PortOpen = False Then Command2.Enabled = False
If MSComm1.PortOpen = False Then Command3.Enabled = False
If MSComm1.PortOpen = False Then Command4.Enabled = False
If MSComm1.PortOpen = False Then Command5.Enabled = False
If MSComm1.PortOpen = False Then Command6.Enabled = False
If MSComm1.PortOpen = False Then Command7.Enabled = False
If MSComm1.PortOpen = False Then Command8.Enabled = False
If MSComm1.PortOpen = True Then Command1.Enabled = True
If MSComm1.PortOpen = True Then Command2.Enabled = True
If MSComm1.PortOpen = True Then Command3.Enabled = True
If MSComm1.PortOpen = True Then Command4.Enabled = True
If MSComm1.PortOpen = True Then Command5.Enabled = True
If MSComm1.PortOpen = True Then Command6.Enabled = True
If MSComm1.PortOpen = True Then Command7.Enabled = True
If MSComm1.PortOpen = True Then Command8.Enabled = True
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: activar un evento para un conjunto de componentes
« Respuesta #1 en: 26 de Febrero de 2009, 19:36:13 »
la respuesta es usar un array de controles.

- pegas un commandbutton la primera vez
- copias dicho commandbutton y pegas, te preguntará si deseas crear un arreglo de botones, le dices que si
- ahora todos los commandbutton tienen el mismo nombre, solo que cambia el índice.

con un bucle puedes recorrer los botones.

for n=0 to 7
   Command1(n).enable=false
next n

no he probado hacer arrays con el mscomm, intenta a ver.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: activar un evento para un conjunto de componentes
« Respuesta #2 en: 26 de Febrero de 2009, 20:03:07 »
gracias.provare a ver.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: activar un evento para un conjunto de componentes
« Respuesta #3 en: 26 de Febrero de 2009, 20:18:09 »
ya hace tiempo intente hacer un array de controles bottom pero parece que no puedo ejecutar diferentes ejecuciones con el evento clic.
parece ser que aunque hay varios botones en el formulario con diferentes extensiones command11(1) y command11(2) etc.
se ejecuta solo una linea de codigo para todos los botones.cuando lo que quiero es que cada boton sea independiente.
no se si me explico.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: activar un evento para un conjunto de componentes
« Respuesta #4 en: 26 de Febrero de 2009, 20:25:04 »
En la función que se ejecuta con el evento de todos esos botones hay un parámetro que indica qué botón es el que la activó.

Private Sub Command1_Click(Index As Integer)

End Sub

Index entrega el número del objeto que llamó al evento (al menos en VB6).

Después con el index ya puedes actuar respecto al botón específico.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: activar un evento para un conjunto de componentes
« Respuesta #5 en: 26 de Febrero de 2009, 20:31:28 »
No programo en Visual Basic, pero por la estructura del programa yo pondría como una primera aproximación:

Command1.Enabled = MSComm1.PortOpen
Command2.Enabled = MSComm1.PortOpen
Command3.Enabled = MSComm1.PortOpen
Command4.Enabled = MSComm1.PortOpen
Command5.Enabled = MSComm1.PortOpen
Command6.Enabled = MSComm1.PortOpen
Command7.Enabled = MSComm1.PortOpen
Command8.Enabled = MSComm1.PortOpen
Command1.Enabled = MSComm1.PortOpen
Command2.Enabled = MSComm1.PortOpen
Command3.Enabled = MSComm1.PortOpen
Command4.Enabled = MSComm1.PortOpen
Command5.Enabled = MSComm1.PortOpen
Command6.Enabled = MSComm1.PortOpen
Command7.Enabled = MSComm1.PortOpen
Command8.Enabled = MSComm1.PortOpen

Y quitaría los IF.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: activar un evento para un conjunto de componentes
« Respuesta #6 en: 26 de Febrero de 2009, 21:05:18 »
gracias.ya voy entendiendo lo del Index.es que no me habia dado cuenta de que el index es el numero del boton independiente.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: activar un evento para un conjunto de componentes
« Respuesta #7 en: 27 de Febrero de 2009, 18:22:58 »
Es como dice Santiago, el index es un valor que devuelve el evento indicando el índice del botón que lo generó. Después con un select case (o swicht en C) llamas a la función correspondiente al botón

No programo en Visual Basic, pero por la estructura del programa yo pondría como una primera aproximación:

Command1.Enabled = MSComm1.PortOpen
Command2.Enabled = MSComm1.PortOpen
Command3.Enabled = MSComm1.PortOpen
Command4.Enabled = MSComm1.PortOpen
Command5.Enabled = MSComm1.PortOpen
Command6.Enabled = MSComm1.PortOpen
Command7.Enabled = MSComm1.PortOpen
Command8.Enabled = MSComm1.PortOpen
Command1.Enabled = MSComm1.PortOpen
Command2.Enabled = MSComm1.PortOpen
Command3.Enabled = MSComm1.PortOpen
Command4.Enabled = MSComm1.PortOpen
Command5.Enabled = MSComm1.PortOpen
Command6.Enabled = MSComm1.PortOpen
Command7.Enabled = MSComm1.PortOpen
Command8.Enabled = MSComm1.PortOpen

Y quitaría los IF.

Un saludo

¡una solución elegante!  :P



La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: activar un evento para un conjunto de componentes
« Respuesta #8 en: 27 de Febrero de 2009, 19:26:42 »
pues una solucion muy buena.la que me habeis aconsejado.

Command1(0).Enabled = MSComm1.PortOpen
Command1(1).Enabled = MSComm1.PortOpen
Command1(2).Enabled = MSComm1.PortOpen
Command1(3).Enabled = MSComm1.PortOpen
Command1(4).Enabled = MSComm1.PortOpen
Command1(5).Enabled = MSComm1.PortOpen
Command1(6).Enabled = MSComm1.PortOpen
Command1(7).Enabled = MSComm1.PortOpen

pero practicando al final.oleeee
me habeis ayudado a hacerlo en solo tres lineas.y funciona perfectamente.

For i = 0 To 7
Command1(i).Enabled = MSComm1.PortOpen
Next i

Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: activar un evento para un conjunto de componentes
« Respuesta #9 en: 27 de Febrero de 2009, 21:48:56 »
tengo otro problemilla.

quiero que cuando se introduzca algo que no sea un numero en un textbox.me mande un mensage de error.y no se si esto sirve,ya que me salta hasta con numeros.

If IsNumeric(Text1.Text) Then MsgBox "solo se puede introducir numeros", vbInformation, "Error de Entrada"
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: activar un evento para un conjunto de componentes
« Respuesta #10 en: 28 de Febrero de 2009, 01:34:17 »
Hace más de un año que usé esta opción, pero recuerdo que debes activar el evento Validation sobre el textbox a revisar. Ya dentro de la función que se ejecuta con ese evento pones:

Citar
'Hace la validación de los valores ingresados
Private Sub txtPoll_time_Validate(KeepFocus As Boolean) 'checa poll_time
    'si no es número o si no es mayor a 5 segundos y menor a 60
   If IsNumeric(txtPoll_time.Text) = False Or Val(txtPoll_time.Text) < 5 Or _
   Val(txtPoll_time.Text) > 60 Then
      KeepFocus = True
      MsgBox "Escriba un número en segundos, mayor a 5 y menor a 60", , _
      "Tiempo de petición"
   End If
End Sub

Si el dato está mal ingresado, obligas al control a no perder Focus poniendo KeepFocus a true. Así el usuario no podrá dejar el textbox mal llenado.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: activar un evento para un conjunto de componentes
« Respuesta #11 en: 08 de Marzo de 2009, 20:07:59 »
fenomenal me ha servido de mucho.gracias
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado Gonzalo_BlackHawk

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 519
Re: activar un evento para un conjunto de componentes
« Respuesta #12 en: 08 de Marzo de 2009, 20:57:38 »
quiero que cuando se introduzca algo que no sea un numero en un textbox.me mande un mensage de error.y no se si esto sirve,ya que me salta hasta con numeros.

Yo en mi caso, lo que hice fue diseñar una función que impidiera que el usuario coloque caracteres no numéricos en la caja de texto. Aunque antes de procesar los datos tambien verificaba si el dato ingresado era un numero válido y si estaba dentro del rango correcto, esta función daba un efecto mucho más profesional al programa. La función es la siguiente:

Código: [Seleccionar]
Public Function IngresarSoloNumeros(ByVal KeyAscii As Integer, ByVal Caracteres_adicionales As String) As Integer
'Esta función permite que solo sean ingresados en la caja de texto los numeros y los caracteres adicionales que se deseen.
If InStr("0123456789" & Caracteres_adicionales, Chr(KeyAscii)) = 0 Then
    IngresarSoloNumeros = 0
Else
    IngresarSoloNumeros = KeyAscii
End If
'Teclas especiales permitidas.
If KeyAscii = 8 Then IngresarSoloNumeros = KeyAscii     'Retroceso.
If KeyAscii = 13 Then IngresarSoloNumeros = KeyAscii    'Enter.
End Function

Luego para cada caja de texto que desees colocas el código siguiente. Supongamos que tenes una caja de texto llamada Txt_Numero y quieres que solo se puedan ingresar numeros enteros positivos. Entonces colocas en el formulario donde tenes la caja de texto:

Código: [Seleccionar]
Private Sub Txt_Numero_KeyPress(KeyAscii As Integer)
KeyAscii = IngresarSoloNumeros(KeyAscii, "")
End Sub

Inclusive a esta función puedes indicarle de antemano si podes colocar numeros solo positivos, o positivos y negativos, enteros o decimales, si podes ingresar numeros hexadecimales, entre otras, ya que permite pasar como parámetros los caracteres adicionales además de los numeros del 0 al 9 que podremos ingresar.

Por ejemplo, si tambien tenemos una caja de texto llamada Txt_Decimal y queremos que puedan ingresarse cualquier numero real, sea decimal o no, positivo o negativo, entonces colocamos:
Código: [Seleccionar]
Private Sub Txt_Decimal_KeyPress(KeyAscii As Integer)
KeyAscii = IngresarSoloNumeros(KeyAscii, "+-.")
End Sub

Bueno, espero que sea de utilidad. Nos estamos leyendo.
"Siempre piensa si el jugo vale la exprimida..."

"La muerte esta tan segura de vencer que nos da toda una vida de ventaja."


 

anything