I’m trying to optimize the scroll panel by toggling the visibility of dynamically created panels inside it, but I’m struggling to get it to work.
The panels are created based on the number of steps in a machine recipe, and they are then stored in the database according to the number written on each panel. Therefore, they should always stay in their original order without switching positions.
I’ve tried various solutions, but since I’m a bit inexperienced, I might have made some mistakes along the way. The latest attempt involved making panels disappear, but every time a panel is hidden, the scrollbar readjusts and returns to the beginning.
<code>Private Sub UpdatePanelVisibility()
Dim scrollPercentage As Double = PagStep1.VerticalScroll.Value / (PagStep1.VerticalScroll.Maximum - PagStep1.ClientSize.Height)
' Ottieni i limiti visibili dell'area scorrevole
Dim visibleTop As Integer = PagStep1.VerticalScroll.Value
Dim visibleBottom As Integer = visibleTop + PagStep1.ClientSize.Height
' Spazio aggiuntivo prima e dopo l'area visibile (buffer)
Dim bufferSpace As Integer = 50
' Ordina i pannelli per il numero nel nome
Dim panels = PagStep1.Controls.OfType(Of Panel)().
OrderBy(Function(pnl) Integer.Parse(pnl.Name.Replace("PanelStep", "")))
' Itera sui pannelli nell'ordine corretto
For Each pnl As Panel In panels
' Calcola la posizione verticale del pannello
Dim panelTop As Integer = pnl.Top
Dim panelBottom As Integer = panelTop + pnl.Height
' Verifica se il pannello è visibile nell'area scrollabile con buffer
If panelBottom > (visibleTop - bufferSpace) AndAlso panelTop < (visibleBottom + bufferSpace) Then
' Rendi il pannello visibile
' Calcola la nuova posizione dello scroll in base alla percentuale memorizzata
Dim newScrollValue As Integer = CInt(scrollPercentage * (PagStep1.VerticalScroll.Maximum - PagStep1.ClientSize.Height))
' Reimposta la posizione dello scroll per evitare cambiamenti involontari
PagStep1.VerticalScroll.Value = Math.Max(0, newScrollValue)
<code>Private Sub UpdatePanelVisibility()
Dim scrollPercentage As Double = PagStep1.VerticalScroll.Value / (PagStep1.VerticalScroll.Maximum - PagStep1.ClientSize.Height)
' Ottieni i limiti visibili dell'area scorrevole
Dim visibleTop As Integer = PagStep1.VerticalScroll.Value
Dim visibleBottom As Integer = visibleTop + PagStep1.ClientSize.Height
' Spazio aggiuntivo prima e dopo l'area visibile (buffer)
Dim bufferSpace As Integer = 50
' Ordina i pannelli per il numero nel nome
Dim panels = PagStep1.Controls.OfType(Of Panel)().
OrderBy(Function(pnl) Integer.Parse(pnl.Name.Replace("PanelStep", "")))
' Itera sui pannelli nell'ordine corretto
For Each pnl As Panel In panels
' Calcola la posizione verticale del pannello
Dim panelTop As Integer = pnl.Top
Dim panelBottom As Integer = panelTop + pnl.Height
' Verifica se il pannello è visibile nell'area scrollabile con buffer
If panelBottom > (visibleTop - bufferSpace) AndAlso panelTop < (visibleBottom + bufferSpace) Then
' Rendi il pannello visibile
pnl.Visible = True
Else
' Nascondi il pannello
pnl.Visible = False
End If
Next
' Calcola la nuova posizione dello scroll in base alla percentuale memorizzata
Dim newScrollValue As Integer = CInt(scrollPercentage * (PagStep1.VerticalScroll.Maximum - PagStep1.ClientSize.Height))
' Reimposta la posizione dello scroll per evitare cambiamenti involontari
PagStep1.VerticalScroll.Value = Math.Max(0, newScrollValue)
End Sub
</code>
Private Sub UpdatePanelVisibility()
Dim scrollPercentage As Double = PagStep1.VerticalScroll.Value / (PagStep1.VerticalScroll.Maximum - PagStep1.ClientSize.Height)
' Ottieni i limiti visibili dell'area scorrevole
Dim visibleTop As Integer = PagStep1.VerticalScroll.Value
Dim visibleBottom As Integer = visibleTop + PagStep1.ClientSize.Height
' Spazio aggiuntivo prima e dopo l'area visibile (buffer)
Dim bufferSpace As Integer = 50
' Ordina i pannelli per il numero nel nome
Dim panels = PagStep1.Controls.OfType(Of Panel)().
OrderBy(Function(pnl) Integer.Parse(pnl.Name.Replace("PanelStep", "")))
' Itera sui pannelli nell'ordine corretto
For Each pnl As Panel In panels
' Calcola la posizione verticale del pannello
Dim panelTop As Integer = pnl.Top
Dim panelBottom As Integer = panelTop + pnl.Height
' Verifica se il pannello è visibile nell'area scrollabile con buffer
If panelBottom > (visibleTop - bufferSpace) AndAlso panelTop < (visibleBottom + bufferSpace) Then
' Rendi il pannello visibile
pnl.Visible = True
Else
' Nascondi il pannello
pnl.Visible = False
End If
Next
' Calcola la nuova posizione dello scroll in base alla percentuale memorizzata
Dim newScrollValue As Integer = CInt(scrollPercentage * (PagStep1.VerticalScroll.Maximum - PagStep1.ClientSize.Height))
' Reimposta la posizione dello scroll per evitare cambiamenti involontari
PagStep1.VerticalScroll.Value = Math.Max(0, newScrollValue)
End Sub