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

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

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

Re[2]: TreeViewの画像キー設定でエラー


(過去ログ 57 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■32186 / inTopicNo.1)  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 に変わってました。

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


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





引用返信 編集キー/
■32187 / inTopicNo.2)  Re[1]: TreeViewの画像キー設定でエラー
□投稿者/ まどか (605回)-(2009/02/03(Tue) 03:54:17)
単にメモリリークしているだけとか。
というか、DestroyIconを呼び出さなければならないとか。

> 選択したノードのアイコンを変えたくないので、BeforeSelectイベントで
> SelectedImageKeyプロパティを変更しようとしたところ、以下のエラーが発生しました。

イベントを使わずとも、ノードを作った時にImage〜とSelected〜を同時に設定すればよいかと。
引用返信 編集キー/
■32188 / inTopicNo.3)  Re[1]: TreeViewの画像キー設定でエラー
□投稿者/ .SHO (638回)-(2009/02/03(Tue) 09:03:32)
No32186 (tunami さん) に返信

> 選択ノードのアイコンがImageList内の0番目のアイコン(フォルダアイコン)に
> 変わってしまいます。

ノード作成時に0番目にしなければいいだけです。
引用返信 編集キー/
■32252 / inTopicNo.4)  Re[1]: TreeViewの画像キー設定でエラー
□投稿者/ tunami (2回)-(2009/02/03(Tue) 22:55:08)
No32187 (まどか さん) に返信
> イベントを使わずとも、ノードを作った時にImage〜とSelected〜を同時に設定すればよいかと。

> まどか 殿
↑なレス見て、大きなボケ気づきました。
イベントで処理していたのは、実は「TreeView」のSelected〜を設定しようとしてたので、
これがTreeView内で値が共有なのかと思ってたからでしてーー;
「TreeNode」のSelected〜を設定することで、問題なく動きました。

> .SHO 殿
明示指定はしてなかったのですが、ImageListに一つでも画像を積むと、
Index未指定=0番目になるっぽいです。
ワタクスのボケのせいでお騒がせしました。


ちなみに、なぜTreeView.Selected〜を変更するとMainLoop近辺でこけるのかについては、
メインループ辺りは詳しくないのでよくはわかりませんが、
今回は置いといても問題なさそうなのでその辺触ることあればちゃんと解消しようと思います。


お騒がせしました。



解決済み
引用返信 編集キー/
■32267 / inTopicNo.5)  Re[2]: TreeViewの画像キー設定でエラー
□投稿者/ 魔界の仮面弁士 (986回)-(2009/02/04(Wed) 10:30:23)
2009/02/04(Wed) 10:43:29 編集(投稿者)

No32252 (tunami さん) に返信
> 明示指定はしてなかったのですが、ImageListに一つでも画像を積むと、
> Index未指定=0番目になるっぽいです。

必ずしも 0 固定というわけではありません。

TreeNode に画像を設定していない場合、表示される画像は
TreeView の設定値に依存するのですが、その初期値が
ImageIndex = SelectedImageIndex = 0 になっているためかと。


> これがTreeView内で値が共有なのかと思ってたからでしてーー;

ある意味では共有されているようです。

TreeNode に画像を指定した場合は、それが優先的に利用されますが、
TreeNode に画像を指定しなかった場合には、TreeView の
下記プロパティが利用されます。そしてこの場合、TreeView 側の
設定を変えると、画像未設定な TreeNode の画像も変化します。

SelectedImageIndex
SelectedImageKey
ImageIndex
ImageKey
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -