Jun 21, 2010
I am looking for the best way to dynamically arrange the location of labels (or any control for that matter) during runtime in a Windows Forms application using VB.net or C# in VS2008.I have a control that displays messages created by users.This control has a panel docked at the top which holds the header information for each message, called pnlHeader There are 8 labels: 4 of them display static descriptions (e.g. "To", "From", "Created Date", "Completed Date")And the other 4 display the relevant data for those descriptions. (Passed in during runtime from a MS SQL 2005 DB).Static labels are named: lblCreatedDateLbl and dynamic ones: lblCreatedDate The application runs on monitors of various size and resolution, therefor I would like for all of the labels to arrange themselves with equal spacing in pnlHeader, based on the current width of the panel.
View 1 Replies
At first, I had simply created the labels in the Designer and used Anchors (half of the lables were set to (Top, Left) and the other half to (Top, Right)). This solution worked for most scenarios, but did not always provide a consistent solution, so I decided to add the controls in code instead.
I thought it would be easier to work with the labels by creating a panel for each corresponding pair. So pnlCreatedDate would hold lblCreatedDateLbl and lblCreatedDate I wrote 2 methods: 1 to define each label and add it to the relevant panel: Sub AddLabels
and another to determine the width of the panels and set the correct location: Sub SetLoc Currently, AddLabels runs in the constructor after InitializeComponent() and SetLoc is called after the data has been passed in from the database.
I've tried making minor changes and tweaks to the width and size parameters, enabling and disabling AutoSize, but nothing returns a consistent solution, instead either all the description labels are misplaced, or do not appear at all or completely whack locations come up.
Private Sub AddLabels()
'Label Created By:'
lblCreatedByLbl.Location = New Point(0, 0)