我有一个在运行时创建的按钮
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";
//点击后
答案 0 :(得分:1)
您可以将TextBox
添加到Button
控件并创建具有以下方法和属性的EditableButton
控件:
EditMode
:获取或设置开始编辑的方式。它可以是OnPressF2
,OnClick
,Programmatically
。根据此属性的值,编辑将通过按 F2 或在Click
上或通过代码调用BeginEdit
开始。
BeginEdit()
:通过显示TextBox
开始编辑。
EndEdit()
:结束编辑并隐藏文本框,并将TextBox
的文本提交为Button
的文本。CancelEdit()
:取消编辑并隐藏文本框。 IsEditing
:确定控件是否处于编辑模式并且TextBox
可见。
按 Enter 结束编辑并提交文本。
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);
}
}
答案 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