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(),那么行为怎么会不同呢?!

任何建议不胜感激。

问候。

Visual Studio C# 使用单一方法的屏幕行为不一致

行为有所不同,因为单击按钮上的鼠标操作会从文本框中删除焦点,而按某个键则不会。

尝试在未OK DialogResult 时添加对 Control.Focus() 或 Control.Select() 的调用:

textBox1.SelectionStart = 0;
textBox1.SelectionLength = textBox1.Text.Length;
textBox1.Focus();
// Or
textBox1.Select();

单击 Button1 时,textBox1 没有焦点,因此不会选择任何文本。