【发布时间】:2016-08-02 07:00:18
【问题描述】:
我有一个包含许多用户可以从托盘运行的表单的应用程序。但是当用户运行 2 个表单时,只有最后一个可以工作,直到他关闭它。第二个表单关闭后,第一个表单又开始工作了。
如何让多个表单一直工作,就像窗口中的其他程序一样(例如,同一个网络浏览器的多个窗口)?
这是我在互联网上找到的部分代码,我用它来显示和隐藏表单。
public MyApplicationContext()
{
MenuItem SmsMenuItem = new MenuItem("SMS", new EventHandler(ShowSms));
MenuItem ExitMenuItem = new MenuItem("Wyjdź", new EventHandler(Exit));
MenuItem HistoryMenuItem = new MenuItem("Historia", new EventHandler(ShowHistory));
NotifyIcon notifyIcon = new NotifyIcon();
notifyIcon.Icon = SMSapp.Properties.Resources.Icon1;
notifyIcon.ContextMenu = new ContextMenu(new MenuItem[] { SmsMenuItem, HistoryMenuItem, ExitMenuItem });
notifyIcon.Visible = true;
}
void ShowSms(object sender, EventArgs e)
{
if (Globals.globals.Set.DBConn)
{
UnitOfWork uow = new UnitOfWork();
using (SmsForm sm = new SmsForm(uow))
{
if (sm.Visible)
sm.Focus();
else
sm.ShowDialog();
}
}
else
{
using (SmsForm sm = new SmsForm())
{
if (sm.Visible)
sm.Focus();
else
sm.Show();
}
}
}
void ShowHistory(object sender, EventArgs e)
{
if (Globals.globals.Set.DBConn)
{
UnitOfWork uow = new UnitOfWork();
using (HistoryForm sm = new HistoryForm(uow))
{
if (sm.Visible)
sm.Focus();
else
sm.ShowDialog();
}
}
else
{
using (HistoryForm sm = new HistoryForm())
{
if (sm.Visible)
sm.Focus();
else
sm.ShowDialog();
}
}
}
void Exit(object sender, EventArgs e)
{
notifyIcon.Visible = false;
Application.Exit();
}
【问题讨论】:
-
在打开新表单时尝试使用
Show()而不是ShowDialog() -
是的,这是我做的第一件事。但是窗口显示然后立即消失。
-
Show是正确的。如果您需要帮助使其正常工作,请尝试创建minimal reproducible example