在设计时添加带有文本框的标签

本文关键字:文本 标签 添加 | 更新日期: 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);
        }
    }

虽然这不是一个完整的解决方案,但您需要编写额外的行为,例如随着文本框移动标签,在文本更改时更改标签的位置,在删除文本框时删除标签,等等。

另一个解决方案是根本不使用标签,只是手动绘制文本框旁边的文本。

恐怕不行,您必须使用UserControlCustomControl,因为没有办法同时添加TextBox和相关的Label