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

本文关键字:对话框 属于 | 更新日期: 2023-09-27 18:17:44

我有一个表单,我使用ShowDialog()方法来调出,这样用户就不能将控制更改回主表单,并且在子表单上,我有一个MessageBox.Show()方法调用,它返回一个dialgresult。

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

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

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

子窗体上的cancel button click方法中的代码:

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按钮的消息框和一个询问用户是否要继续关闭表单的问题。但是无论他们按yes还是no,它都会关闭消息框(它总是应该这样)和子窗体(它有一半的时间不应该这样)。

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

BtnCancel是一个对话框按钮,并将窗体的DialogResult设置为取消或没有或类似的东西。由于您已经通过ShowDialog作为对话框打开了表单,设置DialogResult导致表单关闭并返回结果。

所以你需要将BtnCancelDialogResult属性设置为none来防止这种"奇怪"的行为

为什么不在dgvScannedItems.RowCount上添加一个手表,看看值是什么?