|
分類:[.NET 全般]
ListBox間で項目をドラッグ&ドロップで入れ替えることができるように拡張したクラスを作成しています。
単一項目の入れ替えは問題なくできましたが、ListBoxのMultiColumnをTrueにして、複数項目の入れ替えもできるようにしたいのですが、躓きました。
ListBoxのイベントではなく、メッセージをフックしてマウスのUpとDownを捕捉しています(ListBox間で共有できる処理にする必要があるので)。単一のときにうまくいったのは、マウスがDownした項目をDownした座標から取得しているからです(SelectedIndicesを参照していないです)。複数項目にした場合、すでに選択されている項目も当然取得しなければいけないのですが、ListBoxがクリックされて項目が選択される処理よりも、フックのほうが処理として早く発生してしまうため、フックして捕捉したクリックでの処理で、SelectedIndices等で選択された項目を取得しても、前回クリックされたときの項目しか取得できません。
何も考えなければ、SelectedIndices等で項目を取得せず、Alt及びShiftもフックして、クリック時に選択されている項目を何かしらで覚えておけば良いのでしょうが、思いのほか面倒ですし、スマートじゃない気がします。何か、よりスマートに実現する方法はありませんでしょうか?
|