Visual Basic - como ordenar botones consecutivamente

Life is soft - evento anual de software empresarial
 
Vista:
Imágen de perfil de Rafael

como ordenar botones consecutivamente

Publicado por Rafael (7 intervenciones) el 19/12/2017 21:51:14
de nuevo recurriendo a los expertos a ver si alguien me puede ayudar con una pequeña duda; resulta que tengo este formulario con varios checkbox:

1

los cuales al estar activo me muestran unos botones en este formulario:

2

un ejemplo de lo que les digo algo así:

3
4

ahora mi duda es la siguiente existe alguna linea de código en donde los coloque consecutivamente uno al lado del otro, no dejando el espacio que se ve en la imagen 4.

quien me pueda ayudar se lo agradecería.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

como ordenar botones consecutivamente

Publicado por Antoni Masana (558 intervenciones) el 20/12/2017 07:48:41
Si que existe.

Te pongo un ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
n_Top=120      ' -- Margen superior de los botones
n_Left=120     ' -- Margen izquierdo del primer boton
n_Height=300   ' -- Altura de los botones
n_Sep_Top      ' -- Separacion entre botones de cada fila
n_Sep_Left     ' -- Separacion entre botones
 
' ---&--- El Chekbox1 pone el Boton1
 
IF CheckBox1.Value = 1 then
   If Boton.Width + n_Left + n_Sep_Left > Form.Width Then
      n_Left = 120
      n_Top = n_Top + n_Height + n_Sep_Top
   End If
   Boton1.Top = n_Top
   Boton1.Left = n_Left
   n_Left = n_Left + Boton1.Width + n_Sep_Left
End If
 
' ---&--- El Chekbox2 pone el Boton2
 
IF CheckBox2.Value = 1 then
   If Boton.Width + n_Left + n_Sep_Left > Form.Width Then
      n_Left = 120
      n_Top = n_Top + n_Height + n_Sep_Top
   End If
   Boton2.Top = n_Top
   Boton2.Left = n_Left
   n_Left = n_Left + Boton2.Width + n_Sep_Left
End If
 
' ---&--- El Chekbox3 pone el Boton3
 
IF CheckBox3.Value = 1 then
   If Boton.Width + n_Left + n_Sep_Left > Form.Width Then
      n_Left = 120
      n_Top = n_Top + n_Height + n_Sep_Top
   End If
   Boton3.Top = n_Top
   Boton3.Left = n_Left
   n_Left = n_Left + Boton3.Width + n_Sep_Left
End If

Los nombres de los objetos son genéricos y pueden no coincidir con nombres reales

Creo que siguiendo el código se entiende bastante bien

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

como ordenar botones consecutivamente

Publicado por Antoni Masana (558 intervenciones) el 20/12/2017 12:04:47
El código que he puesto es a modo de ejemplo para entender como se hace en forma básica pero en tu caso se debería hacer algo un poquito mas optimo:

Por un lado definimos las 5 variables como publicas

El proceso que debe colocar los botones que supongo debe ser al abrir el formulario el codigo seria esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Sub Form_Load()
     ' ---&--- Inicializa la variables
 
    n_Top=120      ' -- Margen superior de los botones
    n_Left=120     ' -- Margen izquierdo del primer boton
    n_Height=300   ' -- Altura de los botones
    n_Sep_Top=120      ' -- Separacion entre botones de cada fila
    n_Sep_Left =120    ' -- Separacion entre botones
 
    IF CheckBox1.Value = 1 then PonBoton(Boton1)
    IF CheckBox2.Value = 1 then PonBoton(Boton2)
    IF CheckBox3.Value = 1 then PonBoton(Boton3)
    IF CheckBox4.Value = 1 then PonBoton(Boton4)
    IF CheckBox5.Value = 1 then PonBoton(Boton5)
...
End Sub
 
Private Sub PonBoton(Boton as Object)
   If Boton.Width + n_Left + n_Sep_Left > Form.Width Then
      n_Left = 120
      n_Top = n_Top + n_Height + n_Sep_Top
   End If
   Boton.Top = n_Top
   Boton.Left = n_Left
   n_Left = n_Left + Boton.Width + n_Sep_Left
End Sub

Con esto se consigue que el codigo del proceso PonBoton funcione igual para los 40 y pico botones y no tenga un error como me ha pasado en el POST anterior que todos los If Boton.Width + ... estan mal porque tendrian que ser If Boton1.Width + ... , If Boton2.Width + ... ... Faltaba el numero de boton.
Además hay dos variables ( n_Sep_Top y n_Sep_Left) a las que no tienen valor.

Este código no esta probado y podría tener errores de sintaxis.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rafael

como ordenar botones consecutivamente

Publicado por Rafael (7 intervenciones) el 21/12/2017 17:43:13
gracias por responder antoni, pero cuando dices

IF CheckBox1.Value = 1 then PonBoton(Boton1)

a que te refieres PonBoton (Boton1) " me imagino que es el nombre del botón que quiero mostrar "
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

como ordenar botones consecutivamente

Publicado por Antoni Masana (558 intervenciones) el 21/12/2017 19:00:21
Exactamente es el nombre del objeto boton que se quiere mostrar.
El proceso PonBoton recibe como parametro un objeto, en este caso el objeto boton y lo coloca a continuación del último boton.
Puede ser que en tu codigo no se llamen Boton y conserves el nombre por defecto y lo llames CommandButton1 o lo llames de otra forma es igual y si tienes duras o no te acaba de funcionar enviamelo y lo reviso.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rafael

como ordenar botones consecutivamente

Publicado por Rafael (7 intervenciones) el 21/12/2017 19:31:30
la verdad es que cada vez que sigo leyendo me confundo mas.

le envié lo que ya tengo hecho a su correo si lo podría revisar se lo agradeciria
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

como ordenar botones consecutivamente

Publicado por Antoni Masana (558 intervenciones) el 21/12/2017 21:02:18
Ya he recibido tu fichero y he visto como funciona. Te cuento como funciona, que ya lo sabes y te digo como deberia funcionar para lo que quieres hacer.
Como es un poco lioso para mi que debo buscar los nombres tengo que andar saltando entre ventanas.

Desde la hoja Excel abres el formulario uf_sistema de con el boton hipodromos abres el formulario uf_hipodrimos al ir seleccionando los diferentas caballos se van viendo en el primer formulario, hasta aqui es discutible si es necesario o no pero al cerrar el segundo formulario es cuando se debe reordenar los botones y esta es la parte nueva que voy ha realizar el codigo al menos con los 5 primeros botones.

Si no lo termino hoy te lo envio mañana.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rafael

como ordenar botones consecutivamente

Publicado por Rafael (7 intervenciones) el 21/12/2017 21:05:48
OK TE LO AGRADECERIA.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar