在设计时添加带有文本框的标签
本文关键字:文本 标签 添加 | 更新日期: 2023-09-27 18:05:28
我正在使用VS.NET (c#)创建一个项目,其中包含许多包含文本框和相关标签的表单。我通过为包含标签名称的文本框创建的公开属性创建了关联。问题是,每次我在设计时添加一个文本框时,我都必须添加一个标签,然后在文本框的属性中输入标签名称。当我创建文本框时,我宁愿在设计时动态地这样做,就像旧的VB文本框添加一样。我一直在网上搜索一种在设计时添加文本框时动态添加标签的方法,但没有找到任何可接受的解决方案。我在这个网站上找到了一个答案,建议添加一个包含文本框和标签的用户控件,虽然这可能是我找到的最好的解决方案,但我认为它对我的限制比我想的要多。我是否需要通过一些成熟的定制设计师来完成这个简单的任务?
TIA
虽然我喜欢更好地使用UserControl的解决方案(更简单,更容易处理),但可能在某些情况下,不创建更多会消耗资源的东西是可取的(例如,如果您在一个表单上需要很多这样的标签-文本框对)。
我想到的最简单的解决方案如下(标签在您构建项目后显示在设计器中):
public class CustomTextBox : TextBox
{
public Label AssociatedLabel { get; set; }
public CustomTextBox():base()
{
this.ParentChanged += new EventHandler(CustomTextBox_ParentChanged);
}
void CustomTextBox_ParentChanged(object sender, EventArgs e)
{
this.AutoAddAssociatedLabel();
}
private void AutoAddAssociatedLabel()
{
if (this.Parent == null) return;
AssociatedLabel = new Label();
AssociatedLabel.Text = "Associated Label";
AssociatedLabel.Padding = new System.Windows.Forms.Padding(3);
Size s = TextRenderer.MeasureText(AssociatedLabel.Text, AssociatedLabel.Font);
AssociatedLabel.Location = new Point(this.Location.X - s.Width - AssociatedLabel.Padding.Right, this.Location.Y);
this.Parent.Controls.Add(AssociatedLabel);
}
}
虽然这不是一个完整的解决方案,但您需要编写额外的行为,例如随着文本框移动标签,在文本更改时更改标签的位置,在删除文本框时删除标签,等等。
另一个解决方案是根本不使用标签,只是手动绘制文本框旁边的文本。
恐怕不行,您必须使用UserControl
或CustomControl
,因为没有办法同时添加TextBox
和相关的Label