Visual Studio C# 使用单一方法的屏幕行为不一致
本文关键字:屏幕 不一致 方法 单一 Studio Visual | 更新日期: 2023-09-27 18:36:07
我手上有一个小谜团。 我创建了一个表单,提示用户输入一些内容,然后显示显示输入的 CancelOK 消息框。 用户可以通过单击"提交"按钮或按 Enter 键来输入输入。 诀窍是,如果用户取消,我希望关闭 MessageBox 并再次突出显示文本字段中的原始文本。 这是代码:
namespace WindowsFormsManualAdditions
{
public partial class ManualAdditionsForm : Form
{
public ManualAdditionsForm()
{
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
additionsAction();
}
}
private void button1_Click(object sender, EventArgs e)
{
additionsAction();
}
private void additionsAction()
{
DialogResult btn = MessageBox.Show(textBox1.Text + " additions are being added manually", "Confirm Manual Additions", MessageBoxButtons.OKCancel);
if (btn == DialogResult.OK)
{
MessageBox.Show("Hellow World!");
this.Close();
}
else
{
textBox1.SelectionStart = 0;
textBox1.SelectionLength = textBox1.Text.Length;
}
}
}
}
奥秘在于,当我运行这个表单时,调用 additionsAction() 方法时会发生两件不同的事情:
1)用户输入数据,按回车键,选择取消,消息框消失并突出显示原始文本。
2) 用户输入数据,单击"提交"按钮,选择"取消",消息框消失,但原始文本未突出显示。
但是这两个动作调用相同的方法,即 additionsAction(),那么行为怎么会不同呢?!
任何建议不胜感激。
问候。
行为有所不同,因为单击按钮上的鼠标操作会从文本框中删除焦点,而按某个键则不会。
尝试在未OK
DialogResult 时添加对 Control.Focus() 或 Control.Select() 的调用:
textBox1.SelectionStart = 0;
textBox1.SelectionLength = textBox1.Text.Length;
textBox1.Focus();
// Or
textBox1.Select();
单击 Button1 时,textBox1 没有焦点,因此不会选择任何文本。