前回はクリップボードの履歴から文字列をペーストするアプリケーションを作成しました。

クリップボードの履歴をとりペーストできるようにする

履歴のなかにはいらないものもあるはずです。そこでいらないものを削除したり、よく使うものをメニューの上位に表示させるといった工夫をしてみることにします。

デザイナで以下のようなフォームを作ります。

まず履歴のなかからいらないものを削除する機能を追加します。[削除]をクリックするとチェックボックスにチェックがついたものを削除します。

GetCheckedItemIndexesメソッドはリストボックスのチェックがつけられている項目のインデックスのリストを返します。

[全部削除]をクリックするとすべての項目を削除します。

[一番上に]をクリックするとチェックをいれた項目を一番上に移動させます。

GetMenuText(string str)メソッドはクリップボード内の文字列からメニューの項目として表示するための文字列を返します。

[内容確認]をクリックすると以下のような新しいフォームが表示され、クリップボードの履歴の文字列を確認することができます。

それからリストボックスの項目をドラッグ&ドロップで移動できるようにしてみましょう。

コンストラクタ内で自作メソッド InitCheckedListBox()を呼び出してチェックボックス付きリストボックスの初期化に関する処理をおこないます。

まずドラッグ&ドロップを許可するとともにマウスが移動したときのイベントに対応できるようにします。

まずマウスボタンが押されているときにマウスが移動したら、それはドラッグの始まりです。ドラッグが開始されたらマウスポインタがある位置にある項目を取得します。そしてDoDragDropメソッドを呼び出します。

ドラッグされているときに他の項目の上にマウスがある場合は移動可能です。e.EffectをDragDropEffects.Moveに設定します。そうでないときは移動することはできないということなのでDragDropEffects.Noneを設定します。

ドロップされたら移動可能であれば移動させます。

最後にこのアプリは基本的に常駐させたいので使わないときはタスクトレイに表示させます。そこでNotifyIconを使います。

×ボタンをクリックしても終了しないでタスクトレイのなかで動き続けます。また本当に終了させたいときの処理も追加します。