可编辑的按钮文本

Editable Button Text

我有一个在运行时创建的按钮

Button myBtn = new Button();
Initialize(myBtn);
myBtn.Click += myBtn_Click();
myBtn.Text="Add or Edit Text";//default text string

当用户 click myBtn 时,它会突出显示现有文本并且它是可编辑的,用户可以键入任何新的 text

如何让 button controlclick event 期间可编辑?

用户单击并输入任何字符串后,结果将是 myBtn.Text = "Any Text"

示例:myBtn.Text="Add or Edit Text"; //点击前

myBtn.Text="any text or string that user type it"; //点击后

您可以放置​​一个文本框,用户可以在其中输入一些文本,然后在单击按钮时可以设置文本:

myBtn.Text=txt_value.Text;

或者您可以尝试以下方法来突出显示文本:

默认创建文本框Visible=False;

myBtn_Click

txt_value.Visible=True;
myBtn.FontBold=True;
myBtn.Text=txt_value.Text; //to change the text each time the button is clicked

您可以将 TextBox 添加到 Button 控件并创建具有以下方法和属性的 EditableButton 控件:

  • EditMode:获取或设置编辑将如何开始。它可以是 OnPressF2OnClickProgrammatically。根据此 属性 的值,编辑将通过按 F2Click 或通过您的代码调用 BeginEdit.[=31= 开始]

  • BeginEdit():显示 TextBox 开始编辑。

  • EndEdit(): 结束编辑并隐藏文本框并提交 TextBox 的文本作为 Button.
  • 的文本
  • CancelEdit(): 取消编辑并隐藏文本框。
  • IsEditing:判断控件是否处于编辑模式,TextBox是否可见。

  • Enter 结束编辑并提交文本。

  • Escape 取消编辑并放弃更改。

EditableButton

这里是一个具有上述属性和方法的按钮控件的例子。您可以通过添加 BeginingEditingEndingEdit 等事件或公开 TextBox.

的某些属性或事件来增强它
using System;
using System.Windows.Forms;

public class EditablButton : Button
{
    private TextBox txt;
    public enum EditModes { OnPressF2, OnClick, Programmatically }
    public EditModes EditMode { get; set; } = EditModes.OnPressF2;
    public bool IsEditing => txt.Visible;
    public EditablButton()
    {
        txt = new TextBox();
        txt.TextAlign = HorizontalAlignment.Center;
        txt.Visible = false;
        txt.Multiline = true;
        txt.Dock = DockStyle.Fill;
        this.Controls.Add(txt);
        txt.KeyDown += Txt_PreviewKeyDown;
    }
    private void Txt_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyData == Keys.Enter)
        {
            EndEdit();
            e.Handled = true;
            e.SuppressKeyPress = true;
        }
        else if (e.KeyData == Keys.Escape)
        {
            CancelEdit();
            e.Handled = true;
            e.SuppressKeyPress = true;
        }
    }
    public void BeginEdit()
    {
        txt.Text = this.Text;
        txt.SelectAll();
        txt.Visible = true;
        txt.Focus();
    }
    public void EndEdit()
    {
        this.Text = txt.Text;
        txt.Visible = false;
        this.Focus();
    }
    public void CancelEdit()
    {
        txt.Visible = false;
        this.Focus();
    }
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (!IsEditing && EditMode == EditModes.OnPressF2 && keyData == Keys.F2)
        {
            BeginEdit();
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
    protected override void OnClick(EventArgs e)
    {
        if (EditMode == EditModes.OnClick)
            BeginEdit();
        else
            base.OnClick(e);
    }
}