複数行と全行の選択がオンになっているListViewコントロールを使用しています。一度に複数の行を選択すると、一部の行が魔法のようにチェックされます。これは、マウスを上にドラッグしたとき、および1つを選択し、Shiftキーを押しながら別のクリックをクリックしたときに発生します。
ここで問題を説明する画像を参照してください:
グレープフルーツで何が起こっているのですか?誰?
複数行と全行の選択がオンになっているListViewコントロールを使用しています。一度に複数の行を選択すると、一部の行が魔法のようにチェックされます。これは、マウスを上にドラッグしたとき、および1つを選択し、Shiftキーを押しながら別のクリックをクリックしたときに発生します。
ここで問題を説明する画像を参照してください:
グレープフルーツで何が起こっているのですか?誰?
残念ながら、ListViewクラスにはバグがあります。これはそのうちの1つです。次のコードは私のために働いた修正です。
編集:申し訳ありませんが、これは正しく機能しませんが、質問に表示されるエラーを防ぐことができます。これにより、複数の項目を選択してから、チェックボックスをクリックしてそれらをチェックすることができなくなります。
void SetupListView()
{
listView.ItemCheck += new ItemCheckEventHandler(listView_ItemCheck);
listView.MouseDown += new MouseEventHandler(listView_MouseDown);
listView.MouseUp += new MouseEventHandler(listView_MouseUp);
listView.MouseLeave += new EventHandler(listView_MouseLeave);
}
bool mouseDown = false;
void listView_MouseLeave(object sender, EventArgs e)
{
mouseDown = false;
}
void listView_MouseUp(object sender, MouseEventArgs e)
{
mouseDown = false;
}
void listView_MouseDown(object sender, MouseEventArgs e)
{
mouseDown = true;
}
void listView_ItemCheck(object sender, ItemCheckEventArgs e)
{
if(mouseDown)
{
e.NewValue = e.CurrentValue;
}
}
私は別のフォーラムでこれに答えました:
http://www.codeproject.com/Messages/3417741/Re-how-to-disable-multi-select-of-checkbox-in-list.aspx
HTH-hground
簡単な質問はこれを試してみてください
private void listView1_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (ModifierKeys == Keys.Control || ModifierKeys == Keys.Shift)
{
e.NewValue = e.CurrentValue;
}
}