Это то, что вы действительно не должны исправлять. Оставлять форму включенной во время отображения диалогового окна рискованно. Пользователь может запустить код из этой формы, который не должен запускаться при активном диалоге. Как отображение другого диалога.
Но вы можете с помощью хитрости и делать это осторожно. Вызов ShowDialog () перебирает все открытые формы и отключает их. Вы можете повторно включить его, используя P / Invoking API-функцию EnableWindow (). Хитрость заключается в том, чтобы сделать это, пока отображается диалоговое окно, Control.BeginInvoke () может сделать это.
Это лучше всего объяснить на примере. Ему нужны три формы и кнопка на главной форме, все с именами по умолчанию. Форма 2 остается немодальной, пока отображается диалоговое окно. Возможно, вам придется переместить его, чтобы он не скрывался под формами.
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
button1.Click += new EventHandler(button1_Click);
}
private Form2 mNonModal;
void button1_Click(object sender, EventArgs e) {
this.BeginInvoke(new MethodInvoker(makeNonModal));
new Form3().ShowDialog(this);
}
void makeNonModal() {
if (mNonModal != null) EnableWindow(mNonModal.Handle, true);
}
protected override void OnLoad(EventArgs e) {
mNonModal = new Form2();
mNonModal.FormClosed += (s, ea) => mNonModal = null;
mNonModal.Show();
}
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern void EnableWindow(IntPtr hWnd, bool enable);
}