Reputation: 1459
I'm having a rather odd problem with a C# user control. Basically it's a panel wherein you can add rows of controls by pressing a button.
When the user presses the button, a new set of controls is added as a row. The code is pretty simple, just setting properties and adding them to the panel, as follows:
private void AddCommentControls()
{
_noOfComments++;
ComboBox tempCbCategory = new ComboBox();
TextBox tempTxtRoomNo = new TextBox();
ComboBox tempPositive = new ComboBox();
TextBox tempTxtComment = new TextBox();
tempCbCategory.Name = "cbCategory" + _noOfComments.ToString();
tempTxtRoomNo.Name = "txtRoomNo" + _noOfComments.ToString();
tempPositive.Name = "cbPositive" + _noOfComments.ToString();
tempTxtComment.Name = "txtComment" + _noOfComments.ToString();
tempCbCategory.Location = controls["cbCategory" + (_noOfComments - 1).ToString()].Location;
tempCbCategory.FormattingEnabled = true;
tempCbCategory.Size = new Size(119, 21);
tempCbCategory.Location = new Point(tempCbCategory.Location.X, (tempCbCategory.Location.Y + tempCbCategory.Height + 50));
controls.Add("cbCategory" + _noOfComments.ToString(), tempCbCategory);
pnlBg.Controls.Add(tempCbCategory);
tempTxtRoomNo.Location = controls["txtRoomNo" + (_noOfComments - 1).ToString()].Location;
tempTxtRoomNo.Size = new Size(68, 21);
tempTxtRoomNo.Location = new Point(tempTxtRoomNo.Location.X, (tempTxtRoomNo.Location.Y + tempTxtRoomNo.Height + 50));
controls.Add("txtRoomNo" + _noOfComments.ToString(), tempTxtRoomNo);
pnlBg.Controls.Add(tempTxtRoomNo);
tempPositive.Location = controls["cbPositive" + (_noOfComments - 1).ToString()].Location;
tempPositive.Size = new Size(46, 21);
tempPositive.FormattingEnabled = true;
tempPositive.Items.AddRange(new object[] {"Yes", "No"});
tempPositive.Text = "Yes";
tempPositive.Location = new Point(tempPositive.Location.X, (tempPositive.Location.Y + tempPositive.Height + 50));
controls.Add("cbPositive" + _noOfComments.ToString(), tempPositive);
pnlBg.Controls.Add(tempPositive);
tempTxtComment.Location = controls["txtComment" + (_noOfComments - 1).ToString()].Location;
tempTxtComment.Size = new Size(437, 57);
tempTxtComment.Location = new Point(tempTxtComment.Location.X, (tempTxtComment.Location.Y + tempTxtComment.Height + 50));
tempTxtComment.Multiline = true;
controls.Add("txtComment" + _noOfComments.ToString(), tempTxtComment);
pnlBg.Controls.Add(tempTxtComment);
}
My problem comes after adding a few controls, the combo boxes (or the text boxes, I cant quite decide which) appear to move up/down by an ever increasing amount as the amount of "rows" increases, as shown here:
I've been through this quite a few times and must be missing something glaringly obvious but I need to get it sorted so I can move on!
Any help would be greatly appreciated.
Regards, Daniel.
EDIT: If anyones interested, this was the result after implementing the accepted answer:
Upvotes: 0
Views: 192
Reputation: 8786
put tempCbCategory;tempTxtRoomNo;tempPositive;tempTxtComment
into a usercontrol. or set tempTxtRoomNo
and tempTxtComment
: AutoSize
to False
before set their size.
Upvotes: 0
Reputation: 30175
FlowLayoutPanel
to layout your rows from the top to bottom + you will have scrollbars if it will overflow main container.Upvotes: 2