我有一个winform,其自定义标签继承自Windows Form Label。我需要允许用户编辑此标签并更改值。
我知道我们可以使用文本框通过将readonly属性更改为false来允许用户进行编辑。
但我使用标签的原因是我可能需要更改文本的方向,因此需要更改自定义标签。
所以我的问题是,是否可以允许用户编辑正常的Winform标签?
帖子:Editable Label Controls不是一个有效的解决方案。这也没有得到公认的答案。
答案 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"。祝你的编码好运:))