Forums Neueste Beiträge
 

Steuerelemente automatisch der Fenstergröße anpassen

17/09/2007 - 15:23 von Hartmut Callies | Report spam
Hallo,
ich probiere bereits einige Zeit und schaffe es nicht, dass sich die
Controls so der verànderten Fenstergröße anpassen, dass auch
die Zwischenràume zwischen den Controls sich veràndern bzw.
erhalten bleiben.
Ich habe ein kleines Beispiel mit einer Form, einer ComboBox
und zwei Textboxen:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load
Me.Width = 600
Me.Height = 300

ComboBox1.Left = 29
ComboBox1.Top = 35
ComboBox1.Width = 170
ComboBox1.Height = 21

TextBox1.Left = 231
TextBox1.Top = 35
TextBox1.Width = 153
TextBox1.Height = 20

TextBox2.Left = 416
TextBox2.Top = 35
TextBox2.Width = 136
TextBox2.Height = 20
End Sub

Für alle Controls habe ich die Eigenschaft Anchor auf Top,
Left, Right festgelegt. Mit dem Vergrößern der Form werden
die Ràume zwischen den Controls von den Controls selbst
genutzt.
Was mache ich falsch? Was muss ich àndern, damit die
Controls ihre Größe entsprecht der Formulargröße àndern,
aber die Ràume zwischen den Controls erhalten bleiben?

In VB6 habe ich das Control ActiveResize von VBGold
Software eingesetzt. Damit wurden die Größe der Controls
entsprechend der Fenstergröße angepasst und die
Zwischenràume blieben erhalten.

Hartmut Callies
 

Lesen sie die antworten

#1 Peter Götz
18/09/2007 - 09:27 | Warnen spam
Hallo Hartmut,

ich probiere bereits einige Zeit und schaffe es nicht,
dass sich die Controls so der verànderten Fenstergröße
anpassen, dass auch die Zwischenràume zwischen
den Controls sich veràndern bzw. erhalten bleiben.



... schnipp...

Für alle Controls habe ich die Eigenschaft Anchor
auf Top, Left, Right festgelegt. Mit dem Vergrößern
der Form werden die Ràume zwischen den Controls
von den Controls selbst genutzt.
Was mache ich falsch? Was muss ich àndern,
damit die Controls ihre Größe entsprecht der
Formulargröße àndern, aber die Ràume zwischen
den Controls erhalten bleiben?



Mit dem blossen Setzen der Anchoreigenschaft
Deiner Controls ist es in diesem Fall nicht getan.

Hier mal ein Beispiel für eine ComboBox und
zwei Textboxen.

' /// Code in einer leeren Form.
Public Class Form1
Private WithEvents Combo1 As ComboBox
Private WithEvents Textbox1 As TextBox
Private WithEvents Textbox2 As TextBox

Private mF As Double
Private mLoaded As Boolean

Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

CreateControls()
End Sub

Private Sub CreateControls()
Dim Fnt As New Font("Arial", 12)

Combo1 = New ComboBox
With Combo1
.Name = "Combo1"
.Font = Fnt
.SetBounds(10, 25, 150, .Height)
End With
Me.Controls.Add(Combo1)

Textbox1 = New TextBox
With Textbox1
.Name = "Textbox1"
.Text = .Name
.Font = Fnt
.SetBounds(Combo1.Right + 5, 25, 150, .Height)
End With
Me.Controls.Add(Textbox1)

Textbox2 = New TextBox
With Textbox2
.Name = "Textbox2"
.Text = .Name
.Font = Fnt
.SetBounds(Textbox1.Right + 5, 25, 150, .Height)
End With
Me.Controls.Add(Textbox2)

Dim Border As Integer = Me.Width - Me.ClientSize.Width
Me.Width = Textbox2.Right + 10 + Border

mF = Me.ClientSize.Width / 150

Combo1.Anchor = AnchorStyles.Left Or AnchorStyles.Top
Textbox1.Anchor = AnchorStyles.Top
Textbox2.Anchor = AnchorStyles.Top

mLoaded = True
End Sub

Private Sub Form1_Resize _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Me.Resize

If mLoaded Then
Combo1.Width = CInt(Me.ClientSize.Width / mF)

Textbox2.SetBounds _
(Me.ClientSize.Width - Combo1.Width - 10, _
25, _
Combo1.Width, _
Textbox2.Height)

Textbox1.SetBounds _
(Combo1.Right + 5, _
25, _
Textbox2.Left - Combo1.Right - 10, _
Textbox1.Height)
End If
End Sub
End Class
' \\\ E N T E

Statt des _Resize-Ereignisses kannst Du auch _ResizeEnd
nutzen, musst dann allerdings beim Ändern von
Form.WindowState die Prozedur explizit aufrufen.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen