1
我正在使用WinForms
的VS15
与C#
。以编程方式添加未出现的文本框
我动态地添加TextBox
S和Label
s到我Form
基于在ComboBox
用户选择的值(基本上是这个样子了在数据采集,告诉我什么样的用户界面控制它需要一个值)。
当我尝试生成控件时,Label
出现,并且布局很好,但是,如果不存在,TextBox
是显着的。
我已经试过用MaximumSize
和MinimumSize
属性来确认它们是否可能会搞乱某些东西,但它似乎没有任何区别。
我使用这样做是下面的代码(我知道使用List<Pair<Label,TextBox>>
是非常不必要的,但我觉得它有助于可读性):
private void GenerateControls(string formType)
{
string[] formParameters = engine.GetFormParameters(formType);
if (formParameters == null) return;
SplitterPanel panel = splitContainer.Panel1;
panel.Controls.Clear();
List<Pair<Label, TextBox>> controlPairs = new List<Pair<Label, TextBox>>();
int tabIndex = 0;
Point labelPoint = panel.Location + new Size(20, 20);
Size initialOffset = new Size(0, 30);
Size horizontalOffset = new Size(40, 0);
Size tBoxSize = new Size(40,20);
foreach (string parameter in formParameters)
{
Label label = new Label
{
Text = parameter,
Tag = "Parameter Label",
Name = $"lbl{parameter}",
Location = (labelPoint += initialOffset)
};
TextBox textBox = new TextBox
{
AcceptsTab = true,
TabIndex = tabIndex++,
Text = "",
Tag = parameter,
Name = $"txt{parameter}",
MaximumSize = tBoxSize,
MinimumSize = tBoxSize,
Size = tBoxSize,
Location = labelPoint + horizontalOffset
};
controlPairs.Add(new Pair<Label, TextBox>(label, textBox));
}
foreach (Pair<Label, TextBox> pair in controlPairs)
{
panel.Controls.Add(pair.First);
panel.Controls.Add(pair.Second);
}
}
我不相信我的使用Point + Size
是这个问题作为Point
类覆盖了+
运营商,像这样:
controlPairs有什么意义?只需在第一个循环中添加控件即可。使用调试器查看您的位置信息。 – LarsTech
我在我的问题中说过,我认为它有助于代码的可读性,我知道这是一个很没有意义的构造,一旦我运行了它,它就会被删除。至于位置,我在(20; Y)和(60; Y)的文本框上看到这些标签,除非我错过了某些东西,否则这对我来说看起来很好。 –
'Point'类覆盖'+'运算符,使得'Point + Size = Point'。标签使用相同的方法来计算出他们的位置,他们似乎工作正常。任何其他想法? –