在设计时使用文本框添加标签

时间:2014-05-28 13:38:28

标签: c# textbox label controls design-time

我正在使用VS.NET(C#)创建一个项目,其中包含许多包含文本框和关联标签的表单。我通过我为包含标签名称的文本框创建的公开属性创建了关联。问题是每次我在设计时添加一个文本框我都要添加一个标签,然后在文本框的属性中输入标签名称。当我创建文本框时,我宁愿在设计时动态地执行此操作,就像旧的VB文本框添加一样。每当我在设计时添加文本框而没有找到任何可接受的解决方案时,我一直在寻找一种动态添加标签的方法。我在这个网站上找到了一个答案,建议添加一个包含文本框和标签的用户控件,尽管它可能是我找到的最佳解决方案,但我认为这比我想要的更多。我是否必须通过一些成熟的定制设计师来完成这个有希望的简单任务?

TIA

2 个答案:

答案 0 :(得分:1)

虽然我更喜欢使用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);
        }
    }

虽然它不是一个完整的解决方案,但您需要编写其他行为的代码,例如使用文本框移动标签,更改标签文本更改时的位置,删除文本框时删除标签等等上。

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

答案 1 :(得分:0)

我不敢,您必须使用UserControlCustomControl,因为无法同时添加TextBox和关联的Label