クリーンな WindowsFormsApplication ソリューションを作成ToolStrip
し、メイン フォームに を追加して、ボタンを 1 つ配置しました。OpenFileDialog
のClick
イベントがToolStripButton
次のようになるように、も追加しました。
private void toolStripButton1_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
}
他のプロパティやイベントは変更しませんでした。
面白いことに、ダブルクリックするとToolStripButton
(ダイアログが開く前に 2 回目のクリックは非常に速くなければなりません)、両方のダイアログをキャンセルし (またはファイルを選択します。実際には関係ありません)、クライアント領域をクリックします。メイン フォームの場合、NullReferenceException
アプリケーションがクラッシュします (エラーの詳細は投稿の最後に添付されています)。イベントは実装されていませんが、実装されていないことに注意してくださいClick
DoubleClick
。
OpenFileDialog
をユーザーが実装したフォームに置き換えると、 が2ToolStripButton
回クリックされなくなります。
最新の更新プログラムを使用して、 Windows 7 Professional (MSDNAA から) で.NET3.5 を使用して VS2008 を使用しています。VS では多くのオプションを変更しませんでした (フォントサイズ、ワークスペース フォルダー、および行番号のみ)。
これを解決する方法を知っている人はいますか?私のマシンでは 100% 複製可能ですが、他のマシンでも再現できますか?
私が考えることができる 1 つの解決策は、呼び出す前にボタンを無効にしてから、ボタンOpenFileDialog.ShowDialog()
を有効にして戻すことです (ただし、これは適切ではありません)。他のアイデアはありますか?
そして今、約束されたエラーの詳細:
System.NullReferenceException は処理
されませんでした Message="オブジェクト参照がオブジェクトのインスタンスに設定されていません。"
Source="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 remove)
System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID、Int32 reason、Int32 pvLoopData)
at System.Windows.Forms .Application.ThreadContext.RunMessageLoopInner(Int32 理由、
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:
System.AppDomain._nExecuteAssembly(アセンブリ アセンブリ、String[] args)の行 20
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: