用户控件标签和文本框从右向左流动

时间:2014-08-21 10:08:30

标签: c# .net winforms

想到这个问题的标题是非常困难的,所以我试着在这里解释自己做得更好。

我需要创建一个动态Windows窗体,以便在选中/取消选中复选框时,很少有输入字段出现/消失。据我所知,FlowLayoutPanel似乎是实现这一目标的最佳工具。所以我创建了一个包含Label和Textbox的自定义用户控件。我在VS2013 desginer视图中设计了这个新的Control:

The Custom User Control

由于标签上的文字长度可能不同,因此只有在标签已经结束时才开始使用文本框。但是我现在得到的结果是这样的:

Custom User Control in action

标签应该读出" ConnField"而不是" ConnFie"。我尝试在FlowLayoutPanel中添加这些项目,但这导致标签和文本框没有正确排列。是否有任何属性/属性需要设置才能获得预期的结果?我应该使用容器来为我做这一切吗?

另外,如果有其他方法以上述方式动态显示/隐藏元素,我会非常乐意使用这些方法。

1 个答案:

答案 0 :(得分:1)

为了完美契合,您可以编写TextChanged个事件的脚本,以确保TextBox始终就位并保持良好的尺寸。

我已将LabelTextBox放入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
}

当然,您的偏移量可能会有所不同......显然LabelAutoSize = true

修改

由于您评论了将文本框彼此对齐的问题,这里有一些关于此问题的想法。汉斯指出,你不可能拥有这一切:

  • 完全自由的标签&#39;含量
  • 完美契合
  • 并对齐文本框

三个目标冲突。所以你需要妥协:

  • 如果您可以将内容限制为固定的最大值,则结果最佳
  • 有时让同事甚至是用户查看内容以找到表达意思的更短方式会有所帮助
  • 省略号或缩写可能会有所帮助。在这两种情况下,您都应该设置工具提示以显示完整内容
  • 另一种选择是切换到某些标签的较窄字体
  • 而不是一个固定的标签大小,可能有2或3可能会有所帮助:外观有点锯齿状,但看起来要比完全免费的尺寸好很多。