У меня есть две вложенные формы (form1 и form2), показанные модально, то есть из моего MainForm. Я показываю form1 modally by вызов (при событии нажатия кнопки) form1.ShowDialog()
и из кода формы1 я затем вызываю (на другое событие нажатия кнопки) form2.ShowDialog()
.Настройка свойства DialogResult на вложенных формах показала, что модально скрывает распространение модальных диалогов в дереве форм
Установив свойство DialogResult формы2 (например, нажав кнопку закрытия X в строке заголовка формы), форма 2 скрыта (как и ожидалось), а также форму 1 скрыта (неожиданно). Основной поток выполняет код после строки form2.ShowDialog()
и сразу же продолжает выполнение кода после строки form1.ShowDialog()
.
Я пробовал один и тот же вложенный шаблон с новым проектом, и выяснилось, что скрытие не распространяется на первую форму вызова. Следовательно, в моем коде должно быть что-то не так, но я не могу его найти. Кто-нибудь знает, что может вызвать это?
Если это может помочь, я также остановил оба проекта в режиме отладки сразу после нажатия кнопки закрытия формы2. Столбцы вызовов обоих проектов точно совпадают с вызовом программы. 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]
EDIT Вот вместо того, чтобы, как я открываю формы:
private void button1_Click(object sender, EventArgs e)
{
using (Form2 form2 = new Form2())
{
form2.ShowDialog();
}
}
можете ли вы опубликовать свой код, показывающий, как вы открываете формы? – Taryn
благодарит за публикацию кода для открытия формы2, но как насчет form1? у вас есть события закрытия формы и т. д.? – Taryn
@bluefeet form1 отображается таким же образом в событии нажатия кнопки, принадлежащей моему MainForm. Нет, у меня нет закрытий или каких-либо других событий ни в form1, ни в form2 –