可编辑标签控件

时间:2010-02-22 08:29:54

标签: c# winforms controls label edit

有人知道如何创建可编辑标签控件吗?我需要我的用户能够编辑标签(也更改其部分样式信息),但在网上找不到任何有用的信息。

任何帮助都表示赞赏

谢谢

4 个答案:

答案 0 :(得分:3)

您可以创建自定义控件(需要一些工作)。控件可以在内部具有标准标签控件,当用户单击标签(或以某种方式进入编辑模式)时,您可以实例化文本框控件并将其显示在标签控件所在的位置。因此,用户会得到标签控件被“转换”为文本框的错觉。用户可以在文本框中编辑标签文本,编辑完成后,您只需隐藏文本框并将更改应用于标签文本。

如果您还需要编辑样式,则必须在其上显示包含所有可编辑设置的面板,而不是单个文本框。

答案 1 :(得分:1)

你可以简单地使用TextBox控件,当你需要它们时就无法编辑它。只需将readOnly属性设置为true即可。

度过愉快的一天

答案 2 :(得分:1)

间接地做。

E.g。注册双击事件并使用TextBox显示无边框表单,用户可以在其中输入新名称。例如:

LabelEditor

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication
{
    public partial class LabelEditor : Form
    {
        private System.Windows.Forms.TextBox textBox;

        public LabelEditor()
        {
            InitializeComponent();

            this.textBox = new System.Windows.Forms.TextBox();

            this.textBox.Dock = System.Windows.Forms.DockStyle.Fill;
            this.textBox.Location = new System.Drawing.Point(0, 0);
            this.textBox.Name = "textBox";
            this.textBox.Size = new System.Drawing.Size(100, 20);
            this.textBox.TabIndex = 0;
            this.textBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.OnKeyDown);

            this.AutoSize = true;
            this.ClientSize = new System.Drawing.Size(100, 20);
            this.Controls.Add(textBox);
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.MinimumSize = new System.Drawing.Size(100, 20);
            this.Name = "LabelEditor";
            this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
        }

        public override string Text
        {
            get
            {
                if (textBox == null)
                    return String.Empty;

                return textBox.Text;
            }
            set
            {
                textBox.Text = value;
                ResizeEditor();                
            }
        }

        private void ResizeEditor()
        {
            var size = TextRenderer.MeasureText(textBox.Text, textBox.Font);
            size.Width += 20;

            this.Size = size;
        }

        private void OnKeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyData)
            {
                case Keys.Escape:
                    DialogResult = DialogResult.Cancel;
                    this.Close();
                    break;
                case Keys.Return:
                    DialogResult = DialogResult.OK;
                    this.Close();
                    break;
            }
        }
    }
}

表格

using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication
{
    public partial class Form1 : Form
    {
        private Label EditableLabel;

        public Form1()
        {
            InitializeComponent();

            this.EditableLabel = new System.Windows.Forms.Label();

            this.EditableLabel.AutoSize = true;
            this.EditableLabel.Location = new System.Drawing.Point(102, 81);
            this.EditableLabel.Text = "Click me to change...";
            this.EditableLabel.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.LabelMouseDoubleClick);

            this.Controls.Add(this.EditableLabel);
        }

        private void LabelMouseDoubleClick(object sender, MouseEventArgs e)
        {
            var label = sender as Label;

            if (label != null)
            {
                var editor = new LabelEditor();

                editor.Location = label.PointToScreen(new Point(e.X + 5, e.Y + 5));
                editor.Text = label.Text;

                if (DialogResult.OK == editor.ShowDialog())
                {
                    label.Text = editor.Text;
                }
            }
        }
    }
}

答案 3 :(得分:0)

如果您希望也可以编辑样式属性,则可以在表单上使用PropertyGrid控件(与Visual Studio中使用的控件相同,以编辑控件的属性)。