C# 我可以将ShowDialog()设置为不是最顶层吗?

C# 我可以将ShowDialog()设置为不是最顶层吗?,c#,winforms,show,showdialog,topmost,C#,Winforms,Show,Showdialog,Topmost,有没有办法将ShowDialog()设置为非最顶层?我看过所有相关的SO问题,没有一个与我的情况完全相符 paywindow.ShowDialog(this) 我要做的是从datagridview按钮列打开一个新的WinForm。这个新表单从几个SQLite表中提取信息,并允许用户将信息添加到单击按钮的行中 我使用下面的代码打开WinForm。我使用ShowDialog()方法来判断用户是将信息保存在表单中还是取消它 Pay_Bill_Window paywindow = new Pay_Bi

有没有办法将ShowDialog()设置为非最顶层?我看过所有相关的SO问题,没有一个与我的情况完全相符

paywindow.ShowDialog(this)
我要做的是从datagridview按钮列打开一个新的WinForm。这个新表单从几个SQLite表中提取信息,并允许用户将信息添加到单击按钮的行中

我使用下面的代码打开WinForm。我使用ShowDialog()方法来判断用户是将信息保存在表单中还是取消它

Pay_Bill_Window paywindow = new Pay_Bill_Window(getClickedRowID);
if (paywindow.ShowDialog() == DialogResult.OK)
{
    FillPendingPaymentDataGrid(dbAccess.GetPendingBills());
}
我这样做是为了知道是否需要在datagridview中重新加载信息

用户可以在窗口中填写的信息来自其他来源,如web浏览器,因此将表单置于所有应用程序之上并不理想

是否有一种方法可以阻止窗口位于所有应用程序的顶部(在我的系列窗口中位于顶部是可以的),或者是否有一种方法可以告诉用户在另一个窗体上单击了什么按钮(基本上,使用
paywindow.Show()
并查看不同类型的返回)

谢谢你的帮助

使用类似以下内容:
paywindow.ShowDialog(this)
表格1:

表格2:

   public delegate void IsClosing(object sender, DialogResult rsl);

        public event IsClosing FormIsClosing;


        private void Form2_FormClosed(object sender, FormClosedEventArgs e)
        {
            FormIsClosing(this, System.Windows.Forms.DialogResult.Yes);
        }

然后关闭form2,形成闭合火,您可以从1;)捕捉到它

默认情况下,表单不应位于“适用于所有应用程序”的最顶端。如果您看到这种行为,很可能是因为该属性是在设计器中设置的。请在设计器中取消设置属性,或尝试以下操作

using ( Form form = CreateMyForm() ) {
  form.TopMost = false;
  form.ShowDialog(parent);
  ...
}

当使用
ShowDialog()
显示表单时,我没有找到一种方法来防止表单处于最顶端(这将表单显示为模态,我不知道如何覆盖它)

但是,我发现了一种方法,可以通过查看中的
form.Disposed
事件来监视第二个表单(当使用
Show()
显示时)

发件人:

据我所知,这不允许我查看表单关闭的原因(如使用
DialogResult
),因此每次表单关闭时都会触发事件,这对我的情况来说是可以的

paywindow.ShowDialog(this)

应该有用。附加参数说明父对象的状态,并使其位于父对象的顶部,但不是最顶部。Topmost意味着即使您激活了另一个窗口,该窗口也会留在您的桌面上。这不是ShowDialog的默认行为。正如JaredPar提到的,将表单/窗口设置为TopMost=false为true。

我知道,但这是胡说八道,根本与问题无关,请尝试继续你的方式,朋友!在类似的案例中,它对我起了作用!我只是给出了我的想法。这不起作用。ShowDialog()强制窗口位于最上面。问题是我使用ShowDialog()而不是Show()打开窗体。根据MSDN/Google的说法,ShowDialog()打开一个模式表单,需要在返回父表单之前进行交互。如果我用Show()打开表单,我想你的方法会起作用。我很确定这会起作用,但我无法启动Form2\u FormClose或Form2\u FormClosing事件。我确实找到了一个答案,等待form2在另一个SO问题中处理。谢谢您应该将Form2\u FormClosed添加到Form2的Closed事件中!不管怎么说,我很确定我第一次做了什么,但是我仔细检查了FormClosed事件,它没有得到正确的实现-这是我需要的解决方案-谢谢!
paywindow.ShowDialog(this)