|
分類:[C#]
お世話になります。
現状使用している環境は、以下のとおりです。
Windows XP SP2
.NET Framework 3.5 SP1
Visual C# 2008 Express SP1
WindowsアプリでのTreeViewにフォルダ構成を表示させる機能を開発しているのですが、
そこにImageListを追加してノードに画像を表示させようとしています。
ImageListに積むアイコンはSHGetFileInfoにファイルパスを直接渡して取ってきていて、
拡張子毎にアイコンを振り分けられたのは良いのですが、ノードを選択した時に
選択ノードのアイコンがImageList内の0番目のアイコン(フォルダアイコン)に
変わってしまいます。
選択したノードのアイコンを変えたくないので、BeforeSelectイベントで
SelectedImageKeyプロパティを変更しようとしたところ、以下のエラーが発生しました。
System.DivideByZeroException はハンドルされませんでした。
Message="0 で除算しようとしました。"
Source="System.Windows.Forms"
StackTrace:
場所 System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
場所 System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
場所 System.Windows.Forms.Control.DefWndProc(Message& m)
場所 System.Windows.Forms.TreeView.WmMouseDown(Message& m, MouseButtons button, Int32 clicks)
場所 System.Windows.Forms.TreeView.WndProc(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
場所 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
場所 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
場所 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
場所 System.Windows.Forms.Application.Run(Form mainForm)
場所 WindowsApplication3.Program.Main() 場所 G:\Projects\WindowsApplication3\WindowsApplication3\Program.cs:行 15
場所 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
場所 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
場所 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
場所 System.Threading.ThreadHelper.ThreadStart()
InnerException:
# ↑.NET3.5でのエラーです。
# ないとは思いつつもExpress的なバグかと思って.NET2.0のVSTDで試したら
# スタックがもっと長くて、なぜか AccessViolationException に変わってました。
ちなみに直接これの原因かそれとも付随動作かわかりませんが、
↑が発生すると「頻繁に」開いているノードが閉じられたりします。
(困ったことに毎回とか特定のノードでなく、ランダムに閉じられることがあります)
どなたか上記の原因と解決策がわかる方がいましたら、ご教授をお願いします。
|