我有一个包含大量项目的ListBox。用户可以单击项目以编辑其内容。如何阻止用户取消选择所有项目?即,用户不应该没有选择任何东西。
答案 0 :(得分:4)
您的情况中缺少一个案例,清除列表时您将重新选择列表中不再存在的项目。我通过添加额外的支票来解决这个问题。
var listbox = ((ListBox)sender);
if (listbox.SelectedItem == null)
{
if (e.RemovedItems.Count > 0)
{
object itemToReselect = e.RemovedItems[0];
if (listbox.Items.Contains(itemToReselect))
{
listbox.SelectedItem = itemToReselect;
}
}
}
然后我把这个inside a behaviour。
答案 1 :(得分:2)
我不确定是否有直接的方法来禁用取消选择项目,但是对用户透明的一种方法是跟踪最后选择的项目,并且每当SelectionChanged事件是引发并且所选索引为-1,然后重新选择最后一个值。
答案 2 :(得分:1)
这样可以防止用户取消选择...将这两个事件添加到您的checkedListBox1并在设计模式下将属性CheckOnClick设置为“True”。 (MSVS2015)
private void checkedListBox1_SelectedValueChanged(object sender, EventArgs e)
{
checkedListBox1.SetItemChecked(checkedListBox1.SelectedIndex, true);
}
private void checkedListBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
checkedListBox1.SetItemChecked(checkedListBox1.SelectedIndex, true);
}
答案 3 :(得分:0)
要在列表框/下拉列表中禁用一个或多个选项,您可以添加“已禁用”属性,如下所示。这样可以防止用户选择此选项,并获得灰色叠加。
ListItem item = new ListItem(yourvalue, yourkey);
item.Attributes.Add("disabled","disabled");
lb1.Items.Add(item);
答案 4 :(得分:0)
amccormack
建议的一种解决方案:
private void hostsListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if(lstHosts.SelectedItem == null)
{
if(e.RemovedItems.Count > 0)
{
lstHosts.SelectedItem = e.RemovedItems[0];
}