WinformsのListBox
が異常な動作をしているようです。 SelectionMode
を1に設定すると、アイテムをクリックして選択されると予想されます。これは当てはまりますが、アイテムをクリックしてリストを上下にドラッグすると、選択が変更されます。ListBoxで「ドラッグ選択」を無効にする
これは、いくつかのコントロール間でドラッグアンドドロップを実行する必要があることを除けば、それほど大したことではありません。したがって、アイテムを選択してリストの下にドラッグすると、新しく選択されたアイテムが実際にドラッグして登録したアイテムになり、間違ったアイテムが送信されます。
それで、私はさらにmousedownで選択したアイテムへの参照を保存することで包帯を作成しますが、それは悪いユーザーエクスペリエンスとして巻き起こします。私のユーザは、他のリストボックスに項目をドラッグしても機能しますが、元のリストボックスにはもう「正しい」項目が選択されていないため、実際に2番目のコントロールでドロップされた項目が混乱します。
このような動作を変更する方法はありますか? MouseUpの部分を無視して、MouseDownで項目を選択したい。単にイベントを消費するだけでは十分ではないようで、ListBoxをオーバーライドする必要はありません(作成する新しいクラスのドキュメントを作成する必要があります)。
もう1つの問題があります。情報を表示するにはドラッグアンドドロップと 'SelectedIndexChanged'イベントの両方を処理する必要があります。それで、私は古いタイマーのトリックを使用しました(MouseDownでタイマーを開始し、MouseUpでそれをクリアしてからDoDragDrop()を押します)。私はあなたが正しいと思う。 DoDragDropをすぐに呼び出すと、選択モードを回避できます。 – drharris
ドラッグ&ドロップと 'SelectedIndexChanged'の両方を扱うのは問題ありません。アイテムをクリックすると、選択インデックスが変更され、右イベントが発生します。次に 'MouseMove'では、現在のカーソル位置と、' DoDragDrop'を呼び出す適切な時点で、マウスダウンポイントからどのくらい離れているかを確認します。上の私のポストを見て - 私はどのようにドラッグ&ドロップを適切に動作させるための例を追加しました。 – rotman