- PR -

DataGridViewの複数行のドラッグの開始について

1
投稿者投稿内容
Leo
会議室デビュー日: 2008/11/11
投稿数: 13
投稿日時: 2009-02-18 19:47
DataGridViewの複数行を選択状態にして、複数行のドラッグを開始したいのですが、以下の問題が発生し実現できません。
(Drag&Dropの実装部については一応理解できているものとお考えください)

[問題確認手順]
(1) DataGridViewで複数行をCtrlキーなどで選択状態にする。

 参考:DataGridViewの属性設定は、以下。
コード:
// 選択は1行全体とする。
this.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
// 複数行の選択可能とする。
this.MultiSelect = true;
// ドロップを受け入れる。
this.AllowDrop = true;



(2) 選択した複数行をマウスでドラッグを開始する。
  ⇒ ドラッグしようとすると、複数選択が、単一選択に戻ってしまう。
    単一選択に戻ってしまうため、複数行のドラッグができない。

調べると、DataGridViewでは、OnMouseDown()イベントが呼び出された時点で、単一選択になります。
よって、ドラッグの開始(DoDragDrop関数の呼び出し)が記述されている、OnMosueMove()イベント時点で、単一選択になってしまいます。

このドラッグ開始時に、単一選択状態になってしまうのを回避する方法はありますでしょうか?例えば、OnMouseDown時点ではなく、OnMouseUp時点で、単一選択になるなど。
(エクスプローラの場合、このような動きです)

よろしくお願いします。
Leo
会議室デビュー日: 2008/11/11
投稿数: 13
投稿日時: 2009-02-19 10:45
自己レスです。追加情報です。

OnCellMouseDownをオーバーライドして、base.OnCellMouseDown(e)を呼び出さなかったら、選択状態の複数行をそのまま選択状態にすることは可能でした。

コード:
protected override void OnCellMouseDown(DataGridViewCellMouseEventArgs e)
{
    // OnMouseDown時、該当行が選択状態だったら、
    // m_isCallBaseMouseDownMethod をfalseにセットする。
    // そのとき、baseクラスのOnCellMouseDownは呼び出さない。
    if (m_isCallBaseMouseDownMethod == true) {
        base.OnCellMouseDown(e);
    }
}



しかし、呼び出さないと、以下のイベントが発生しなくなってしまいます。
・OnCellClickイベント
・OnCellMouseClickイベント

base.OnCellMouseDown(e); を呼び出さない弊害をつぶしていくしかないのかな。
1

スキルアップ/キャリアアップ(JOB@IT)