对话框属于对话框的奇怪行为

时间:2014-08-13 14:26:10

标签: c# winforms forms dialog

我有一个表单,我使用ShowDialog()方法调出,因此用户无法将控件更改回主窗体,并且在子窗体上我有一个MessageBox.Show()方法调用,它返回一个的DialogResult。

唯一的问题是,无论消息框的对话结果如何,都会导致我的子表单关闭。是否存在我忽略的行为,或者我的代码是否存在问题?

打开子表单的主窗体中的代码:

private void btnScanFree_Click(object sender, EventArgs e)
    {
        frmScan scanForm = new frmScan();
        scanForm.ShowDialog();
    }

子表单上的取消按钮单击方法中的代码:

private void btnCancel_Click(object sender, EventArgs e)
    {
        if (dgvScannedItems.RowCount > 0)
        {
            DialogResult dr = MessageBox.Show("There are scanned items that have not been inserted to the database. Are you sure you want to go back?", "Go Back", MessageBoxButtons.YesNo);

            if (dr == System.Windows.Forms.DialogResult.Yes)
            {
                this.Close();
            }
        }
        else
        {
            this.Close();
        }
    }

在子表单上,如果数据网格视图中没有行,则表单应该关闭,否则会出现一个带有yes和no按钮的消息框以及询问用户是否要继续关闭表单的问题。但无论是按是或否,它都会关闭消息框(它总是应该)和子表单(它不应该有一半的时间)。

2 个答案:

答案 0 :(得分:1)

trigger是一个对话框按钮,将BtnCancel格式的表单设置为“取消”或“否”或类似形式。由于已通过DialogResult设置了ShowDialog的形式打开了对话框,因此将关闭表单并返回结果。

因此,您需要将DialogResult的{​​{1}}属性设置为无,以防止这种“繁琐的”行为。

答案 1 :(得分:0)

为什么不在dgvScannedItems.RowCount上添加观看,看看价值是多少?