Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对话框属于对话框的奇怪行为_C#_Winforms_Forms_Dialog - Fatal编程技术网

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

C# 对话框属于对话框的奇怪行为,c#,winforms,forms,dialog,C#,Winforms,Forms,Dialog,我有一个表单,我使用ShowDialog()方法打开它,这样用户就不能将控件更改回主表单,在子表单上我有一个MessageBox.Show()方法调用,它返回一个DialogResult 唯一的问题是,无论消息框的对话框结果如何,它都会导致我的子窗体关闭。我是否忽略了某个行为,或者我的代码是否有问题 主窗体中打开子窗体的代码: private void btnScanFree_Click(object sender, EventArgs e) { frmScan scan

我有一个表单,我使用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();
        }
    }
以及子窗体上“取消”按钮单击方法中的代码:

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();
        }
    }

在子窗体上,如果数据网格视图中没有行,则窗体应关闭,否则将显示一个消息框,其中包含“是”和“否”按钮,并询问用户是否要继续关闭窗体。但无论他们按是还是否,它都会同时关闭消息框(它总是应该关闭)和子表单(有一半的时间它不应该关闭).

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

BtnCancel
是一个对话框按钮,将窗体的
对话框结果设置为取消、否或类似的内容。由于您已通过
ShowDialog
以对话框的形式打开表单,因此设置
对话框结果将导致表单关闭并返回结果


因此,您需要将
BtnCancel
DialogResult
属性设置为nothing,以防止这种“starnge”行为。

为什么不将其放入注释中?!因为我的销售代表!:)需要50或更多的评论!这将如何阻止表单关闭?是的,btnCancel上的DialogResult属性设置为某个值。重置它,使其没有值(在Visual Studio的“属性”窗口中查看)。因此,在代码块结束之前,我需要将其设置为null?