0

我的表单中有一个简单的 OK/CancelDialogResult实例:

MessageBox.Show("Number of records affected:" + numberOfRecordsroll + " Please check the data is correct before proceeding:", "Please validate your changes", MessageBoxButtons.OKCancel);

DialogResult dr = new DialogResult();
if (dr == DialogResult.OK)
{
    // CommitTheChanges();
    MessageBox.Show("test", "test");
}
else if (dr == DialogResult.Cancel)
{
    //Do nothing
}

如您所见,如果用户单击“是”,CommitTheChanges则应调用该方法,但这并未触发。此后,我将其注释掉并进行了测试MessageBox.Show()。这又是行不通的。我在这里做错了什么?

4

3 回答 3

7

您只是在创建一个新的 DialogResult 并忽略对话框中的单击。相反,您需要从 MessageBox 获取 DialogResult

 String msg = "Number of records affected:" + numberOfRecordsroll + " Please check the data is correct before proceeding:";
 DialogResult dr = MessageBox.Show(msg, "Please validate your changes", MessageBoxButtons.OKCancel);
于 2013-06-24T10:36:38.507 回答
0

您已经比较了dr它的新实例的结果,DialogResult它没有引用当前的MessageBox.

您需要将当前消息框分配DialogResult给博士。

DialogResult dr;

dr = MessageBox.Show("Number of records affected:" + numberOfRecordsroll + " Please check the data is correct before proceeding:", "Please validate your changes", MessageBoxButtons.OKCancel);

if (dr == DialogResult.OK)
                    {
                       // CommitTheChanges();
                        MessageBox.Show("test", "test");
                    }
于 2013-06-24T10:38:19.450 回答
0

当心new关键字。

new在 a 上用作运算符时,reference type您会立即在堆上创建一个新对象,并且由 产生的对象MessageBox现在已经成熟,可以被垃圾收集器收集了。事实上,在这种情况下,您甚至没有DialogResultMessageBox.

像这样的东西会起作用:

DialogResult dr = MessageBox.Show("Number of records affected:" + numberOfRecordsroll + " Please check the data is correct before proceeding:", "Please validate your changes", MessageBoxButtons.OKCancel);

if (dr == DialogResult.OK)
{
    CommitTheChanges();
}
于 2013-06-24T19:10:39.150 回答