0

我手上有一个小秘密。我创建了一个表单,提示用户进行一些输入,然后显示一个 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;
            }
        }
    }
}

神秘的是,当我运行这个表单时,当调用 addedsAction() 方法时会发生两种不同的事情:

1) 用户输入数据,按回车键,选择取消,消息框消失,原文突出显示。

2) 用户输入数据,点击提交按钮,选择取消,消息框消失但原文未突出显示。

但是两个动作都调用了同一个方法,即additionsAction(),那么行为怎么会不同呢?!

任何建议表示赞赏。

问候。

4

2 回答 2

3

行为是不同的,因为在按钮上单击鼠标的动作会从文本框中移除焦点,而按下键则不会。

当 DialogResult 不是时,尝试添加对Control.Focus()Control.Select()OK的调用:

textBox1.SelectionStart = 0;
textBox1.SelectionLength = textBox1.Text.Length;
textBox1.Focus();
// Or
textBox1.Select();
于 2012-06-01T20:39:46.853 回答
1

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

于 2012-06-01T20:39:46.963 回答