C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 57 を表示中)
■32186 / )  TreeViewの画像キー設定でエラー
□投稿者/ tunami (1回)-(2009/02/03(Tue) 02:53:39)

分類:[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 に変わってました。

ちなみに直接これの原因かそれとも付随動作かわかりませんが、
↑が発生すると「頻繁に」開いているノードが閉じられたりします。
(困ったことに毎回とか特定のノードでなく、ランダムに閉じられることがあります)


どなたか上記の原因と解決策がわかる方がいましたら、ご教授をお願いします。





返信 編集キー/


管理者用

- Child Tree -