У меня есть две вложенные формы (form1 и form2), показанные модально, т.е. из моей MainForm я показываю форму1 модально, вызывая (при событии нажатия кнопки) form1.ShowDialog()
и из кода формы 1, который я затем вызываю (по другомусобытие нажатия кнопки) form2.ShowDialog()
.
Устанавливая свойство DialogResult формы 2 (например, нажав кнопку закрытия X в строке заголовка формы), форма 2 скрывается (как и ожидалось), но форма 1 такжескрытый (неожиданно).Основной поток выполняет код после строки form2.ShowDialog()
и сразу после этого продолжает выполнять код после строки form1.ShowDialog()
.
Я опробовал тот же вложенный шаблон с новым проектом, и он вышелчто сокрытие не распространяется на первую форму вызова.Следовательно, должно быть что-то не так с моим кодом, но я не могу его найти.Кто-нибудь знает, что может вызвать это?
Если это может помочь, я также остановил оба проекта в режиме отладки сразу после нажатия кнопки закрытия формы2.Стеки вызовов обоих проектов в точности совпадают с вызовом Program.Main () on.Стеки вызовов отличаются только до этого вызова.Я пытаюсь выделить различия:
Не работающий проект
[Native to Managed Transition]
[Managed to Native Transition]
mscorlib.dll!System.AppDomain.nExecuteAssembly(System.Reflection.RuntimeAssembly assembly, string[] args) + 0x9 bytes
mscorlib.dll!System.Runtime.Hosting.ManifestRunner.Run(bool checkAptModel) + 0x6e bytes
mscorlib.dll!System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly() + 0x90 bytes
mscorlib.dll!System.Runtime.Hosting.ApplicationActivator.CreateInstance(System.ActivationContext activationContext, string[] activationCustomData) + 0x65 bytes
mscorlib.dll!System.Runtime.Hosting.ApplicationActivator.CreateInstance(System.ActivationContext activationContext) + 0xd bytes
mscorlib.dll!System.Activator.CreateInstance(System.ActivationContext activationContext) + 0x44 bytes
Microsoft.VisualStudio.HostingProcess.Utilities.dll!Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone() + 0x23 bytes
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(object state) + 0x63 bytes
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool ignoreSyncCtx) + 0xb0 bytes
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x2c bytes
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() + 0x44 bytes
[Native to Managed Transition]
Рабочий проект
[Native to Managed Transition]
[Managed to Native Transition]
mscorlib.dll!System.AppDomain.ExecuteAssembly(string assemblyFile, System.Security.Policy.Evidence assemblySecurity, string[] args) + 0x6d bytes
Microsoft.VisualStudio.HostingProcess.Utilities.dll!Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() + 0x2a bytes
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(object state) + 0x63 bytes
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool ignoreSyncCtx) + 0xb0 bytes
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x2c bytes
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() + 0x44 bytes
[Native to Managed Transition]
РЕДАКТИРОВАТЬ Вот вместо этого, как я открываю формы:
private void button1_Click(object sender, EventArgs e)
{
using (Form2 form2 = new Form2())
{
form2.ShowDialog();
}
}