我認爲你可以假模態窗口,因此它不是模式,但禁用調用者。我在一個自己的項目中使用了這個。我這樣做:
//Setup small Interface
public interface IDialog
{
//Our own Event which tell the caller if the Dialog is active/inactive
public event DialogChangedEventArgs DialogChanged;
}
//Setup EventArgs for our own Event
public class DialogChangedEventArgs : EventArgs
{
public bool DialogActive{get;}
public DialogChangedEventArgs(bool dialogActive)
{
DialogActive = dialogActive;
}
}
//Setup the Form which act as Dialog in any other form
public class Form2 : Form, IDialog
{
public event EventHandler<DialogChangedEventArgs> DialogChanged;
//If this Form is shown we fire the Event and tell subscriber we are active
private void Form2_Shown(object sender, EventArgs e)
{
DialogChanged?.Invoke(this, true);
}
//If the user close the Form we telling subscriber we go inactive
private void Form2_Closing(object sender, CancelEventArgs e)
{
DialogChanged?.Invoke(this, false);
}
}
public class Form1 : Form
{
//Setup our Form2 and show it (not modal here!!!)
private void Initialize()
{
Form2 newForm = new Form2();
newForm.DialogChanged += DialogChanged;
newForm.Show();
}
private void Form2_DialogChanged(object sender, DialogChangedEventArgs e)
{
//Now check if Form2 is active or inactive and enable/disable Form1
//So just Form1 will be disabled.
Enable = !e.DialogActive;
}
}
這很簡單。只需使用一個事件來告訴你的第一個表格:Hey iam第二個表格並激活。然後,您可以在第二個活動時禁用第一個窗體。您可以完全控制哪些表單處於活動狀態。希望這可以幫助。
模式對話框僅禁用它的所有者。目前還不清楚你已經實現了什麼設置,所以模態對話框也會禁用這些額外的窗口。 – IInspectable
增加了一個示例來說明您所說的看起來不是這種情況。 – user109078