[英]How Can I Keep A C# Listview Control with Check Boxes from “Checking” on Row Selection?
我在表單上有一個帶有CheckBoxes = true
和View = Details
的 ListView 控件,但我不希望復選框被用戶“選中”。 我用它來顯示記錄完成的狀態。 但是,我確實想使用事件處理程序 function 通過代碼檢查該框(即記錄完成: lvMeters_ItemCheck(null, null);
)。
我已禁用檢查框本身(我認為,此設備上的觸摸屏並不精確)。 但是,選擇一行(我有FullRowSelect = true
)時,控件通常會檢查復選框,並且事件處理程序似乎沒有被調用。
我試圖基本上撤消事件處理程序中的操作:
private void lvMeters_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (sender is ListView)
{
if (e.CurrentValue == CheckState.Checked)
lvMeters.Items[e.Index].Checked = true;
else
lvMeters.Items[e.Index].Checked = false;
}
else if (e.CurrentValue == CheckState.Checked)
lvMeters.Items[e.Index].Checked = false;
else
lvMeters.Items[e.Index].Checked = true;
}
問題是上述處理程序沒有在列表視圖 select 上調用,SelectedItemChanged 事件處理程序也沒有調用此事件處理程序,但它仍在檢查 select 上的框。 檢查框本身時確實會調用它。
問一下,我會盡力而為!
所以請隨時告訴我,我這樣做完全錯了,應該以不同的方式做整個事情。
我不熟悉緊湊框架上的 ListView 的限制,但是在標准框架上,您可以使用TreeNode.StateImageIndex屬性。 未選中/選中狀態實際上是使用嵌入標准 winforms 代碼中的小圖像(如果我沒記錯的話,它們是索引 1 和 2)。 因此,例如,如果您這樣做:
private void lvMeters_ItemCheck(object sender, ItemCheckEventArgs e)
{
e.Item.StateImageIndex = 3;
}
它將更改小圖標並將其設置為空。 您還可以使用 ListView ImageList。
嘆息......我在與設計師混在一起時不知何故設法從控件中刪除了事件處理程序。 我在某個時候檢查過它仍然存在,但那時我確實遇到了邏輯/代碼問題。
感謝您的回答:/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.