可编辑按钮文字

时间:2018-12-27 05:12:43

标签: c# .net winforms button textbox

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

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

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

如何在button control期间使click event可编辑?

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

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

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

2 个答案:

答案 0 :(得分:1)

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

  • EditMode:获取或设置开始编辑的方式。它可以是OnPressF2OnClickProgrammatically。根据此属性的值,编辑将通过按 F2 或在Click上或通过代码调用BeginEdit开始。

  • 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);
    }
}

答案 1 :(得分:0)

您可以在用户可以输入一些文本的地方放置一个文本框,然后单击按钮可以设置文本:

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