【问题标题】:Strange behaviour with dialog box belonging to dialog box对话框属于对话框的奇怪行为
【发布时间】:2014-10-06 23:15:24
【问题描述】:

我有一个表单,我使用 ShowDialog() 方法调出,因此用户无法将控制更改回主表单,并且在子表单上我有一个 MessageBox.Show() 方法调用,它返回一个对话结果。

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

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

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

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

【问题讨论】:

  • 是的,您在 btnCancel 上的 DialogResult 属性设置为某个值。重置它,使其没有值(查看 Visual Studio 中的属性窗口)。
  • 所以在代码块结束之前我需要将其设置为null?

标签: c# winforms forms dialog


【解决方案1】:

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

因此,您需要将 BtnCancelDialogResult 属性设置为空,以防止这种“严重”行为。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 为什么不把这个放到评论里?!
    • 因为我的代表! :) 需要 50 条或更多评论!
    • 如何阻止表单关闭?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多