可编辑的按钮文本
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 control
在 click 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
:获取或设置编辑将如何开始。它可以是 OnPressF2
、OnClick
、Programmatically
。根据此 属性 的值,编辑将通过按 F2 或 Click
或通过您的代码调用 BeginEdit
.[=31= 开始]
BeginEdit()
:显示 TextBox
开始编辑。
EndEdit()
: 结束编辑并隐藏文本框并提交 TextBox
的文本作为 Button
. 的文本
CancelEdit()
: 取消编辑并隐藏文本框。
IsEditing
:判断控件是否处于编辑模式,TextBox
是否可见。
按 Enter 结束编辑并提交文本。
- 按 Escape 取消编辑并放弃更改。
EditableButton
这里是一个具有上述属性和方法的按钮控件的例子。您可以通过添加 BeginingEditing
或 EndingEdit
等事件或公开 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);
}
}
我有一个在运行时创建的按钮
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";
//点击后
您可以放置一个文本框,用户可以在其中输入一些文本,然后在单击按钮时可以设置文本:
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
:获取或设置编辑将如何开始。它可以是OnPressF2
、OnClick
、Programmatically
。根据此 属性 的值,编辑将通过按 F2 或Click
或通过您的代码调用BeginEdit
.[=31= 开始]BeginEdit()
:显示TextBox
开始编辑。EndEdit()
: 结束编辑并隐藏文本框并提交TextBox
的文本作为Button
. 的文本
CancelEdit()
: 取消编辑并隐藏文本框。IsEditing
:判断控件是否处于编辑模式,TextBox
是否可见。按 Enter 结束编辑并提交文本。
- 按 Escape 取消编辑并放弃更改。
EditableButton
这里是一个具有上述属性和方法的按钮控件的例子。您可以通过添加 BeginingEditing
或 EndingEdit
等事件或公开 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);
}
}