MessageBox没有默认按钮

时间:2015-09-16 15:25:05

标签: c# messagebox

我的应用程序中有一个表单,用户可以在其中输入序列号列表,每个序列号都要进行快速检查,然后添加到列表中(这是针对库存模块)。因此,用户通常使用条形码扫描仪扫描一堆库存物品中的序列号。

我正在处理用户正在扫描项目并查找KeyPress(输入键)时具有焦点的TextBox e.KeyChar == 13事件。每当按下输入时,我知道我有一个完整的序列号,然后我可以在将其添加到列表之前进行验证。

这是我的问题发生的地方;在某些情况下,我必须在此时提示用户是否确实要将库存项目添加到列表中。我正在使用MessageBox,就像这样:

if (MessageBox.Show("This is a special stock item.\r\nDo you want to add it to the list?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
   // Add item to list
else
   // Do not add item to list

但是因为这只是偶尔发生的事情,用户通常甚至都看不到MessageBox并且只是扫描下一个序列号,当然会丢失,但会以输入键结束,这会触发MessageBox上的默认按钮,并且没有打算这样做,有时甚至不知道它发生了,用户将一个项目添加到列表中并错过了后续项目。

有没有办法可以阻止MessageBox在按下输入时触发任何按钮?我不介意用户是否在条形码后继续扫描条形码并丢失所有按钮,只要MessageBox保持在屏幕上,直到他意识到他的注意力是必需的,并故意选择两个选项中的一个。

1 个答案:

答案 0 :(得分:2)

  

有没有办法阻止MessageBox触发任何按钮   输入是按下了吗?

没有

  

我不介意用户在条形码和条码后继续扫描条形码   只要MessageBox保留在屏幕上直到他,他们都会丢失   意识到他的注意力是必需的,故意选择其中之一   两个选项。

使用YesNoCancel选项,并将默认值设置为Button3,这将是Cancel按钮。现在保持循环,结果是Cancel。当循环退出时,用户将选择YesNo

        DialogResult result;
        do
        {
            result = MessageBox.Show("This is a special stock item.\r\nDo you want to add it to the list?", "Confirmation", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button3);
        } while (result == DialogResult.Cancel);

        if (result == DialogResult.Yes)
        {
            // yes

        }
        else
        {
            // no

        }

----------编辑----------

  

我并不过分喜欢在对话框上设置按钮的想法   除了一些模糊的应用逻辑(来自   用户的观点)。

同意......拥有" noop"按钮不是最佳的。上面的解决方案是一个快速而肮脏的解决方案"。

当你开始实现自己的自定义MessageBox表单时,只要按钮当前聚焦,就可以轻松地忽略Enter键:

public partial class frmVerify : Form
{

    public frmVerify()
    {
        InitializeComponent();
    }

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == Keys.Enter && this.ActiveControl is Button)
        {
            return true; // suppress the keystroke
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }

    // ... more code ...

}