美好的一天,
我想检查是否有人可以解决以下问题。我有一个使用ShowDialog(this)
显示的子窗体,并且正在注册Resize
事件,以便可以与该子窗体一起更改父窗体的状态。问题在于,当父窗体最小化时,子窗体将关闭。我已经确定,父级中的WindowState = FormWindowState.Minimized
调用会导致using
语句传递ShowDialog(IWin32Window)
的阻塞调用,但是我不明白当只有孩子最小化时(父级是然后无法获得焦点),则阻止调用不会通过。我如何解决此问题?最好不要保留对子窗口的引用,并在每次父WindowState
更改时都对其进行检查。
我的代码:
private void StockTakeHistoryMenu_Click(object sender, EventArgs e)
{
using (StockTakeWindow window = new StockTakeWindow())
{
window.Resize += this.ChildStateChanging;
window.ShowDialog(this);
window.Resize -= this.ChildStateChanging;
}
}
private void ChildStateChanging(object sender, EventArgs e)
{
switch ((sender as Form).WindowState)
{
case FormWindowState.Normal:
this.WindowState = FormWindowState.Normal;
break;
case FormWindowState.Minimized:
this.WindowState = FormWindowState.Minimized;
break;
case FormWindowState.Maximized:
this.WindowState = FormWindowState.Maximized;
break;
}
}
答案 0 :(得分:2)
您可以使用此:
private void ChildStateChanging(object sender, EventArgs e)
{
this.Show();
switch ((sender as Form).WindowState)
{
case FormWindowState.Normal:
this.WindowState = FormWindowState.Normal;
break;
case FormWindowState.Minimized:
//this.WindowState = FormWindowState.Minimized;
this.Hide();
break;
case FormWindowState.Maximized:
this.WindowState = FormWindowState.Maximized;
break;
}
}
我先拨打this.Show();
的{{1}}电话,然后写了 ChildStateChanging
而不是this.Hide()
。
答案 1 :(得分:-3)
在我目前正在设计c#win表单的过程中,我可以为您提供帮助。只是逐步描述它,我无法理解您的要求。 这个问题的解决方案(如何防止最小化父窗口关闭子窗口)是您需要使用自定义用户控件,并且当您单击位于自定义用户控件上的按钮时,只需在按钮click事件中编写代码,例如this.hide()。这将隐藏子控件,而不是父控件。