允许用户编辑标签并更改文本 - c#winform

时间:2017-12-08 04:27:18

标签: c# winforms label

我有一个winform,其自定义标签继承自Windows Form Label。我需要允许用户编辑此标签并更改值。

我知道我们可以使用文本框通过将readonly属性更改为false来允许用户进行编辑。

但我使用标签的原因是我可能需要更改文本的方向,因此需要更改自定义标签。

所以我的问题是,是否可以允许用户编辑正常的Winform标签?

帖子:Editable Label Controls不是一个有效的解决方案。这也没有得到公认的答案。

1 个答案:

答案 0 :(得分:3)

到目前为止,这不是最佳选择,但它仍然是一种选择。将表单KeyPreview设置为true,向表单添加KeyDown键事件处理程序,并为标签添加Click事件处理程序。在click事件处理程序中,让它将bool设置为true。在keydown处理程序内部,如果bool为true,则使用if语句将按下的键添加到标签Text属性,这样,如果用户单击标签,则他们键入的任何内容都将进入标签。

我可怕描述的示例代码:

public static Form f1 = new Form();
public static Label l1 = new Label();
public static bool isLabelClicked = false;

然后将这些放入任何方法设置表单及其对象的属性。

f1.KeyPreview = true;
l1.Click += new EventHandler (l1_Clicked);
f1.KeyDown += new KeyEventHandler (f1_keydown);

然后在项目中使用这两种方法

public static void l1_Clicked(object sender, EventArgs e)
{
    isLabelClicked = true;
}

public static void f1_keydown(object sender, KeyEventArgs e)
{
    if (isLabelClicked == true)
    {
        if (e.KeyCode == Keys.A)
        {
            l1.Text += "a";
        }
        else if (e.KeyCode == Keys.B)
        {
            //Etc. For each key
        }
    }
}

这不是最有效的方法,你需要设置一种方法让bool失败,所以每次输入时都不会改变标签值,但它会起作用。

我确信还有一种更简单的方法来处理每个不同的密钥,而不会写出一个巨大的if,否则if block,只是厌倦了转换KeyCode,因为","可以是" Oemcomma"。祝你的编码好运:))