如何将对话框置于所有打开的窗体之上

6

我有三个表单:主表单、销售表单和登录表单。

在主表单中,我设置了一个计时器,例如5分钟后将启动登录表单。

我可以在不关闭主表单的情况下打开销售表单,这样登录表单就会被启动。

问题是,登录表单没有置于销售表单之上,因此用户必须先登录才能使用销售表单。

以下是主表单中的一些代码:

public void timer_Tick(object sender, EventArgs e)
        {
            timer.Stop();
    LoginDialog loginForm = new LoginDialog();
                loginForm.TopLevel = true;
                loginForm.ShowDialog();
timer.Start()
}

 private void pbSales_Click(object sender, EventArgs e)
        {
            Sales salesForm = new Sales();
            salesForm .ShowDialog(this);
        }
3个回答

7

编辑

尝试结合两种方法,这样可能适合你。

private void frmMain_Shown(object sender, EventArgs e)
{
// Make this form the active form and make it TopMost
this.ShowInTaskbar = false;
this.TopMost = true;
this.Focus();
this.BringToFront();
this.TopMost = false;
}

试试这个

yourForm.TopMost = true;

or

Control.BringToFront Method

yourform.BringToFront()

我都试过了。最顶层的窗口总是在我打开的所有程序之上。 - Alvin
如果TopMost不在我打开的所有其他程序(如浏览器)之上,那么它就非常好。 - Alvin
谢谢,我已经尝试过了,不起作用,我已经修改了上面的代码。 - Alvin

2
我认为问题出在你在 MainForm 中调用了 ShowDialog,而且你也打开了销售表单 Sales Form
对话框的父窗体是 MainForm,所以你可以尝试使用: loginForm.ShowDialog(saleform1); 其中,salesform1 是你从主窗体中打开的销售表单实例名称。

是的,这就是我要问的。在发布loginForm.ShowDialog(new Sales())方法之前,我已经尝试过了。Sales是窗体。 - Alvin
你如何使用 Show() 方法展示销售表单? - V4Vendetta
从主窗体创建一个销售Sales实例,并进行调用: Sales salesForm = new Sales(); salesForm.ShowDialog(this); 请参考上面编辑的代码。 - Alvin
1
好的,那么你尝试在计时器中使用 ShowDialog(salesForm) 吗?因为 salesForm 是已经显示/打开的窗体实例,然后登录框会被放置在其上方。 - V4Vendetta
尝试过了,它可以工作,但现在我怎么知道我正在打开哪个表单,因为主表单也可以触发登录表单。 - Alvin
你可以使用 salesForm ?? this,这样就可以处理 salesForm 为空或未打开的情况。 - V4Vendetta

0

尝试使用TopMostBringToFront()进行调试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接