我使用多行和全行選擇ListView控件。當我一次選擇多行時,我的一些行奇蹟般地被檢查。拖動鼠標時也會發生這種情況,也會在選擇另一個時移動。C#列表查看與複選框,多選行時檢查自動複選框
見圖片描述的問題在這裏:
在柚子到底是怎麼回事?任何人?
我使用多行和全行選擇ListView控件。當我一次選擇多行時,我的一些行奇蹟般地被檢查。拖動鼠標時也會發生這種情況,也會在選擇另一個時移動。C#列表查看與複選框,多選行時檢查自動複選框
見圖片描述的問題在這裏:
在柚子到底是怎麼回事?任何人?
不幸的是在ListView類的錯誤,這是其中之一。以下代碼是適用於我的修復程序。
編輯:對不起,這不正常,雖然它可以防止您在問題中顯示的錯誤。這可以防止選擇多個項目,然後通過單擊複選框來檢查它們。
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;
}
}
若要通過直接點擊複選框來切換多個項目,我只需將'mouseDown = true;'更改爲'mouseDown = e.X> 20;'。這適用於我,因爲複選框位於ListView窗口的左側。 – timfoden 2018-01-16 09:00:38
我在另一個論壇回答了這個:
http://www.codeproject.com/Messages/3417741/Re-how-to-disable-multi-select-of-checkbox-in-list.aspx
HTH - hground
嗨,歡迎來到SO。當你的回答只是其他地方的鏈接時,可以考慮在鏈接中發表評論。對於答案,如果您至少提供了有關該鏈接的簡短信息,它將有所幫助。不過,一個很好的答案! – DWright 2012-12-26 18:44:19
它了簡單的問題 只是試試這個
private void listView1_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (ModifierKeys == Keys.Control || ModifierKeys == Keys.Shift)
{
e.NewValue = e.CurrentValue;
}
}
大問題!很清楚地描述了這個問題。 – 2015-05-16 12:14:49