Oppure

Loading
22/10/11 8:15
visualrenzo
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 22/10/11 8:36
aaa
22/10/11 10:11
Ti stai incasinando solo le idee.
Puoi usare semplicemente la proprietà Anchor. Settalaggio: Top, Bottom, Left, Right
22/10/11 10:50
nessuno
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

vb-helper.com/…

e utilizzalo.
Ultima modifica effettuata da nessuno 22/10/11 11: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à.
22/10/11 15:45
visualrenzo
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
aaa
22/10/11 15:58
nessuno
Basta spostare le righe On Error Resume Next in questo modo

On Error Resume Next
.Left = ctl.Left
.Top = ctl.Top
.Width = ctl.Width
.Height = ctl.Height
.FontSize = ctl.Font.Size
On Error GoTo 0


e

On Error Resume Next
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
ctl.Font.Size = y_scale * .FontSize
On Error GoTo 0


P.S. Ridimensionare con la s non con la z ...
Ultima modifica effettuata da nessuno 22/10/11 16: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à.
22/10/11 15:59
visualrenzo
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
aaa