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