Я создал чистое решение WindowsFormsApplication, добавив ToolStrip
в основную форму и разместил на нем одну кнопку. Я добавил также OpenFileDialog
, так что Click
событие ToolStripButton
выглядит следующим образом:Почему исключение NullReferenceException, когда дважды нажата кнопка ToolStrip - openFileDialog.showDialog()?
private void toolStripButton1_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
}
я не изменил какие-либо другие свойства или события.
Самое смешное, что при двойном щелчке по ToolStripButton
(второй щелчок должен быть довольно быстрым, перед открытием диалогового окна) щелкните в клиентской области основной формы, NullReferenceException
сбой приложения (сведения об ошибках прилагаются в конце сообщения). Обратите внимание, что событие Click
реализовано, а DoubleClick
- не.
Что еще более странно, что, когда OpenFileDialog
заменяются любым пользователем Реализуемой формы, ToolStripButton
блоков от того щелкнули дважды.
Я использую VS2008 с .NET3.5 на Windows 7 Professional (из MSDNAA) с последними обновлениями. Я не изменил много параметров в VS (только fontsize, папка рабочего пространства и нумерация строк).
Кто-нибудь знает, как это решить? Это 100% реплицируемое на моей машине, это тоже на других?
Одним из решений, о котором я могу думать, является отключение кнопки до вызова OpenFileDialog.ShowDialog()
, а затем включение кнопки назад (но это не приятно). Любые другие идеи?
А теперь обещанные подробности об ошибке:
System.NullReferenceException было необработанное
Message = «ссылка на объект не указывает на экземпляр объекта.»
Source = "System.Windows.Forms"
StackTrace:
на System.Windows.Forms.NativeWindow.WindowClass.Callback (IntPtr HWND, Int32 сообщ, IntPtr WPARAM, IntPtr LPARAM)
в System.Windows.Forms .UnsafeNativeMethods.PeekMessage (MSG & тзд, HandleRef HWND, Int32 msgMin, Int32 MSGMAX, Int32 удалить)
на System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop (Int32, Int32 dwComponentID причина, 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 (ш) 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 ExecutionContext, ContextCallback обратного вызова, объект состояния)
в System.Threading. ThreadHelper.ThreadStart()
InnerException:
Варианты VS не имеют значения. Это выглядит как ошибка в рамках. – SLaks
Мне не удалось воспроизвести вашу проблему с помощью VS2008 на W2K3 и VS2010 на W2K8. –
Также невозможно воспроизвести с использованием XPsp3, VS2008 и .NET2.0 или 3.5 – Andy