Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Problema col resize di una listbox
Forum - Visual Basic 6 - Problema col resize di una listbox

Avatar
visualrenzo (Normal User)
Pro


Messaggi: 94
Iscritto: 15/05/2009

Segnala al moderatore
Postato alle 10:15
Sabato, 22/10/2011
Buongiorno a tutti, ho un problemico col resize di una listbox.

Ho un form che si chiama super, sto provando a fare ridimensionare gli oggetti in automatico se si modificano le dimenzioni del form.
Le label e la textbox funzionano regolarmente mentre la list invece si rimpicciolisce ma poi non si riallarga quando allargo di nuovo il form.
Come mai? ho usato lo stesso procedimento che per le label e le text.

Di seguito il codice

Dim qqh, qqw, ht, ll As Integer
Dim ml_DimHeight As Long
Dim ml_DimWidth As Long

Public Sub RegolaSchermo()
Super.Height = Screen.Height '* 0.9
Super.Width = Screen.Width '* 0.9
ml_DimHeight = Screen.Height '* 0.9
ml_DimWidth = Screen.Width '* 0.9


LabelNumeriDaCercare.Width = LabelNumeriDaCercare.Width ' così leggo la posizione attuale data da me sul form
LabelNumeriDaCercare.Height = LabelNumeriDaCercare.Height
LabelRicercaSingola.Width = LabelRicercaSingola.Width
LabelRicercaSingola.Height = LabelRicercaSingola.Height
TextTutto.Width = TextTutto.Width
TextTutto.Height = TextTutto.Height
LabelRisultato.Width = LabelRisultato.Width
LabelRisultato.Height = LabelRisultato.Height
List1.Width = List1.Width
List1.Height = List1.Height

End Sub

Private Sub Form_Resize() ' ogni volta che faccio il resize
' aggiugere tutti gli elementi del form
If ml_DimHeight > 0 Then ' aggiugere tutti gli elementi del form
        LabelNumeriDaCercare.Height = LabelNumeriDaCercare.Height * (Super.Height / ml_DimHeight)
        LabelRicercaSingola.Height = LabelRicercaSingola.Height * (Super.Height / ml_DimHeight)
        List1.Height = List1.Height * (Super.Height / ml_DimHeight)
        LabelRisultato.Height = LabelRisultato.Height * (Super.Height / ml_DimHeight)

End If
' aggiugere tutti gli elementi del form
If ml_DimWidth > 0 Then ' aggiugere tutti gli elementi del form
        LabelNumeriDaCercare.Width = LabelNumeriDaCercare.Width * (Super.Width / ml_DimWidth)
        LabelRicercaSingola.Width = LabelRicercaSingola.Width * (Super.Width / ml_DimWidth)
        List1.Width = List1.Width * (Super.Width / ml_DimWidth)
        LabelRisultato.Width = LabelRisultato.Width * (Super.Width / ml_DimWidth)
End If
' aggiugere tutti gli elementi del form
      LabelNumeriDaCercare.Left = LabelNumeriDaCercare.Left
      LabelNumeriDaCercare.Top = LabelNumeriDaCercare.Top
      LabelRicercaSingola.Left = LabelRicercaSingola.Left '+ 1
      LabelRicercaSingola.Top = LabelRicercaSingola.Top ' + 1
      TextTutto.Left = TextTutto.Left
      TextTutto.Top = TextTutto.Top
      LabelRisultato.Left = LabelRisultato.Left
      LabelRisultato.Top = LabelRisultato.Top
      List1.Left = List1.Left
      List1.Top = List1.Top
      
ml_DimHeight = Super.Height
ml_DimWidth = Super.Width

'Label1.Caption = List1.Width
Label8.Caption = List1.Height
End Sub

Ultima modifica effettuata da visualrenzo il 22/10/2011 alle 10:36
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 12:11
Sabato, 22/10/2011
Ti stai incasinando solo le idee.
Puoi usare semplicemente la proprietà Anchor. Settalaggio: Top, Bottom, Left, Right

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:50
Sabato, 22/10/2011
Testo quotato

Postato originariamente da Dark_light:

Ti stai incasinando solo le idee.
Puoi usare semplicemente la proprietà Anchor. Settalaggio: Top, Bottom, Left, Right



Anchor ? In VB6 ?

@visualrenzo ... ma a che servono linee come

      TextTutto.Left = TextTutto.Left
      TextTutto.Top = TextTutto.Top
      LabelRisultato.Left = LabelRisultato.Left
      LabelRisultato.Top = LabelRisultato.Top
      List1.Left = List1.Left
      List1.Top = List1.Top

?

Sono inutili ...

Guarda questo codice

http://www.vb-helper.com/howto_stretch_controls.html

e utilizzalo.

Ultima modifica effettuata da nessuno il 22/10/2011 alle 13:13


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
visualrenzo (Normal User)
Pro


Messaggi: 94
Iscritto: 15/05/2009

Segnala al moderatore
Postato alle 17:45
Sabato, 22/10/2011
Bell' esempio, funziona tutto però all' inizio non mi funzionava perchè c' ho anche un timer per farlo funzionare l' ho dovuto togliere.

Ma non c' è il modo di poterlo tenere effettivamente quello non si deve ridimenzionare ma a me serve

comunque provo a vedere se esiste un ControlPositionType pure per il timer

Ciao e grazie

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:58
Sabato, 22/10/2011
Basta spostare le righe On Error Resume Next in questo modo

Codice sorgente - presumibilmente VB.NET

  1. On Error Resume Next
  2. .Left = ctl.Left
  3. .Top = ctl.Top
  4. .Width = ctl.Width
  5. .Height = ctl.Height
  6. .FontSize = ctl.Font.Size
  7. On Error GoTo 0



e

Codice sorgente - presumibilmente VB.NET

  1. On Error Resume Next
  2. ctl.Left = x_scale * .Left
  3. ctl.Top = y_scale * .Top
  4. ctl.Width = x_scale * .Width
  5. If Not (TypeOf ctl Is ComboBox) Then
  6.    ' Cannot change height of ComboBoxes.
  7.    ctl.Height = y_scale * .Height
  8. End If
  9. ctl.Font.Size = y_scale * .FontSize
  10. On Error GoTo 0



P.S. Ridimensionare con la s non con la z ...

Ultima modifica effettuata da nessuno il 22/10/2011 alle 18:00


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
visualrenzo (Normal User)
Pro


Messaggi: 94
Iscritto: 15/05/2009

Segnala al moderatore
Postato alle 17:59
Sabato, 22/10/2011
Ho trovato ho aggiunto un else if    

     For Each ctl In Controls
        With m_ControlPositions(i)
            If TypeOf ctl Is Line Then
                ctl.X1 = x_scale * .Left
                ctl.Y1 = y_scale * .Top
                ctl.X2 = ctl.X1 + x_scale * .Width
                ctl.Y2 = ctl.Y1 + y_scale * .Height
            ElseIf TypeOf ctl Is Timer Then ' aggiunta da me
            ' non fa niente

            Else
                ctl.Left = x_scale * .Left
                ctl.Top = y_scale * .Top
                ctl.Width = x_scale * .Width
                If Not (TypeOf ctl Is ComboBox) Then
                    ' Cannot change height of ComboBoxes.
                    ctl.Height = y_scale * .Height
                End If
                On Error Resume Next
                ctl.Font.Size = y_scale * .FontSize
                On Error GoTo 0
            End If
        End With
        i = i + 1
    Next ctl

PM Quote