(27-07-2020, 14:10)jguardon escribió: Entiendo tu pregunta pero no la propuesta que haces. Pero ahora te preguntaré yo: ¿por qué motivo sólo quieres mostrar de 4 en 4? Es porque el control combobox se despliega muy grande hacia abajo o es otro el motivo?
Saludos
(27-07-2020, 14:09)gambafeliz escribió: Te pretendo ayudar pero no me queda claro lo que buscas. Te lo describo y tu me dices si lo he entendido.
1. Caja ComboBox
2. Clickamos en el botón con la flecha hacia abajo.
3. Se abre la lista hacia abajo.
4. Tu quieres que presente 4 items y cuando pasas estos items que pasen los siguientes 4 items y sustituyan los anteriores.
¿Es así?
Timer1 As Timer
Gridview1 As GridView
Label1 As Label
iCount As Integer
Public Sub Form_Open()
Dim sData As String[] = Dir(User.home)
Dim iLoop As Integer
Me.W = 275
Me.H = 200
Timer1 = New Timer As "Timer1"
With Gridview1 = New GridView(Me) As "Gridview1"
.X = 5
.Y = 50
.H = 25
.W = 250
.Grid = False
.Columns.Count = 1
.Rows.Count = 0
.Header = GridView.Horizontal
.ScrollBar = Scroll.Vertical
.Columns[0].Title = "ComboBox"
End With
For iLoop = 0 To sData.Max
Inc Gridview1.Rows.Count
Gridview1[iLoop, 0].Text = sData[iLoop]
Next
End
Public Sub Gridview1_Enter()
Timer1.Stop
Gridview1.Height = (Gridview1.Rows[0].Height * 4) + 25
End
Public Sub Gridview1_Leave()
Timer1.Start
End
Public Sub Gridview1_Click()
Gridview1.Columns[0].Title = Gridview1[Last.Row, 0].Text
End
Public Sub Timer1_Timer()
Gridview1.Height = 25
Timer1.Stop
End
Gridview1 As GridView
Public Sub Form_Open()
Dim sData As String[] = Dir(User.home)
Dim iLoop As Integer
Me.W = 275
Me.H = 200
With GridView1 = New GridView(Me) As "Gridview1"
.X = 5
.Y = 50
.H = 25
.W = 250
.Grid = False
.Columns.Count = 1
.Rows.Count = sData.Count
.Header = GridView.Horizontal
.ScrollBar = Scroll.Vertical
.Columns[0].Title = "ComboBox"
End With
For iLoop = 0 To sData.Max
GridView1[iLoop, 0].Text = sData[iLoop]
Next
End
Public Sub GridView1_Enter()
GridView1.Height = Gridview1.Rows[0].Height * 4
End
Public Sub GridView1_Leave()
GridView1.Height = GridView1[Last.Row, 0].H
End
Public Sub GridView1_Click()
GridView1.Columns[0].Title = GridView1[Last.Row, 0].Text
End
SELECT * FROM contacts LIMIT 4 OFFSET 2;
(29-07-2020, 19:18)vuott escribió: Sì, es un simpatico truco.
Quizás... se puede eliminar el Objeto "Timer".
Código:Gridview1 As GridView
Public Sub Form_Open()
Dim sData As String[] = Dir(User.home)
Dim iLoop As Integer
Me.W = 275
Me.H = 200
With GridView1 = New GridView(Me) As "Gridview1"
.X = 5
.Y = 50
.H = 25
.W = 250
.Grid = False
.Columns.Count = 1
.Rows.Count = sData.Count
.Header = GridView.Horizontal
.ScrollBar = Scroll.Vertical
.Columns[0].Title = "ComboBox"
End With
For iLoop = 0 To sData.Max
GridView1[iLoop, 0].Text = sData[iLoop]
Next
End
Public Sub GridView1_Enter()
GridView1.Height = Gridview1.Rows[0].Height * 4
End
Public Sub GridView1_Leave()
GridView1.Height = GridView1[Last.Row, 0].H
End
Public Sub GridView1_Click()
GridView1.Columns[0].Title = GridView1[Last.Row, 0].Text
End
(29-07-2020, 19:58)tincho escribió: Otra manera de hacerlo seria usando una sentencia SQL que incluya las palabras reservadas LIMIT y OFFSET
El método seria el siguiente:
Es necesaria una variable global integer
Luego cada vez que se hace click en el combobox y hay que rellenarlo con 4 registros
La consulta SQL, que tiene que ser algo como se muestra mas abajo, devolvera 4 registros o menos.
Donde LIMIT es la cantidad máxima de registros devueltos y OFFSET el numero de bloque, es decir si hay 20 registros en tabla 20/4 = 5 (no recuerdo si arranca de 0 o de 1)Código:SELECT * FROM contacts LIMIT 4 OFFSET 2;
Una vez obtenidos los 4 registros se cargan en el combobox y listo.
Luego en cada evento click del combobox el numero de offset se incrementara 1 hasta el maximo y ahí vuelta a empezar.
El resultado es un combobox que siempre muestra 4 registros peero son diferentes cada vez.
Saludos.