Я создал чистое решение WindowsFormsApplication, добавил ToolStrip
в основную форму и поместил на нее одну кнопку. Я также добавил OpenFileDialog
, так что событие Click
для ToolStripButton
выглядит следующим образом:
private void toolStripButton1_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
}
Я не изменил никаких других свойств или событий.
Самое смешное, что когда я дважды щелкаю ToolStripButton
(второй щелчок должен быть достаточно быстрым, прежде чем откроется диалоговое окно), затем отменяю оба диалога (или выбираю файл, это не имеет большого значения) и затем щелкните в клиентской области главной формы, приложение NullReferenceException
завершит работу приложения (подробности об ошибках приведены в конце публикации). Обратите внимание, что событие Click
реализовано, а DoubleClick
не равно .
Что еще более странно, когда OpenFileDialog
заменяется какой-либо созданной пользователем формой, ToolStripButton
блокируется от двойного нажатия .
Я использую VS2008 с .NET3.5 на Windows 7 Professional (от MSDNAA) с последними обновлениями. Я не изменил много параметров в VS (только размер шрифта, папка рабочего пространства и нумерация строк).
Кто-нибудь знает, как это решить? Это 100% тиражируется на моей машине, на других тоже?
Одним из решений, которое я могу придумать, является отключение кнопки перед вызовом OpenFileDialog.ShowDialog()
и последующее включение кнопки назад (но это нехорошо). Есть еще идеи?
А теперь обещанные подробности об ошибке:
Исключение System.NullReferenceException не обработано
Сообщение = "Ссылка на объект не установлена для экземпляра объекта."
Источник = "System.Windows.Forms"
StackTrace:
в System.Windows.Forms.NativeWindow.WindowClass.Callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
в System.Windows.Forms.UnsafeNativeMethods.PeekMessage (MSG & msg, HandleRef hwnd, Int32 msgMin, Int32 msgMax, Int32 удалить)
в System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop (Int32 dwComponentID, причина Int32, Int32 pvLoopData)
в System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner (причина Int32, контекст ApplicationContext)
в System.Windows.Forms.Application.ThreadContext.RunMessageLoop (причина Int32, контекст ApplicationContext)
в System.Windows.Forms.Application.Run (форма mainForm)
в WindowsFormsApplication1.Program.Main () w C: \ Users \ Marchewek \ Desktop \ Workspaces \ VisualStudio \ WindowsFormsApplication1 \ Program.cs: строка 20
в System.AppDomain._nExecuteAssembly (сборка сборки, аргументы String [])
в System.AppDomain.ExecuteAssembly (String assemblyFile, Evidence AssemblySecurity, String [] args)
в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly ()
в System.Threading.ThreadHelper.ThreadStart_Context (состояние объекта)
в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта)
в System.Threading.ThreadHelper.ThreadStart ()
InnerException: