1

ユーザーがアイテムのないスペースをクリックしたときに、ListViewでアイテムを選択したままにしておきたいのですが。たとえば、アイテムの下のスペースですが、ListViewコンポーネント上にあります。ListViewプロパティ「HideSelection」をfalseに変更しましたが、これはフォーカスが別のコンポーネントに変更された場合にのみ機能します。ユーザーがListView自体をクリックしたときではありません。ありがとう!

4

2 に答える 2

5

これは通常、修正すべきではないものです。ユーザーが意図的にどこかをクリックしたのは、アイテムの選択を解除したかったからかもしれません。それが意図的でなかった場合、彼女は何が起こったのかを理解し、それを修正する方法を知っています. 標準コントロールに非標準の動作を与えると、ユーザーが混乱するだけです。

しかし、あなたはそれを修正することができます。ネイティブの ListView コントロールがクリックを認識しないようにする必要があります。これには、WndProc() メソッドをオーバーライドし、クリックが発生した場所を確認する必要があります。プロジェクトに新しいクラスを追加し、以下に示すコードを貼り付けます。コンパイル。ツールボックスの上部から新しいコントロールをフォームにドロップします。

using System;
using System.Drawing;
using System.Windows.Forms;

class MyListView : ListView {
  protected override void WndProc(ref Message m) {
    if (m.Msg == 0x201 || m.Msg == 0x203) {  // Trap WM_LBUTTONDOWN + double click
      var pos = new Point(m.LParam.ToInt32());
      var loc = this.HitTest(pos);
      switch (loc.Location) {
        case ListViewHitTestLocations.None:
        case ListViewHitTestLocations.AboveClientArea:
        case ListViewHitTestLocations.BelowClientArea:
        case ListViewHitTestLocations.LeftOfClientArea:
        case ListViewHitTestLocations.RightOfClientArea:
          return;  // Don't let the native control see it
      }
    }
    base.WndProc(ref m);
  }
}
于 2010-03-27T15:31:43.853 に答える
0

1つの方法:SelectedIndexChangedイベントで、値が-1かどうかを確認します。その場合は、以前の値にリセットします(変数に格納されている可能性があります...)

于 2010-03-27T15:09:34.757 に答える