想到这个问题的标题是非常困难的,所以我试着在这里解释自己做得更好。
我需要创建一个动态Windows窗体,以便在选中/取消选中复选框时,很少有输入字段出现/消失。据我所知,FlowLayoutPanel似乎是实现这一目标的最佳工具。所以我创建了一个包含Label和Textbox的自定义用户控件。我在VS2013 desginer视图中设计了这个新的Control:
由于标签上的文字长度可能不同,因此只有在标签已经结束时才开始使用文本框。但是我现在得到的结果是这样的:
标签应该读出" ConnField"而不是" ConnFie"。我尝试在FlowLayoutPanel中添加这些项目,但这导致标签和文本框没有正确排列。是否有任何属性/属性需要设置才能获得预期的结果?我应该使用容器来为我做这一切吗?
另外,如果有其他方法以上述方式动态显示/隐藏元素,我会非常乐意使用这些方法。
答案 0 :(得分:1)
为了完美契合,您可以编写TextChanged
个事件的脚本,以确保TextBox
始终就位并保持良好的尺寸。
我已将Label
和TextBox
放入Panel
进行测试。你可能不需要或不想要textBox1_TextChanged
事件,但它很适合测试......:
private void textBox1_TextChanged(object sender, EventArgs e)
{
label1.Text = textBox1.Text; // this is for testing
}
private void label1_TextChanged(object sender, EventArgs e)
{
textBox1.Left = label1.Right + 6; // <= this is what you need
textBox1.Width = panel2.Width - label1.Width - 8; // <= this is nice to have
}
当然,您的偏移量可能会有所不同......显然Label
有AutoSize = true
修改强>
由于您评论了将文本框彼此对齐的问题,这里有一些关于此问题的想法。汉斯指出,你不可能拥有这一切:
三个目标冲突。所以你需要妥协: