2014-03-29 48 views
0

我处于多选列表视图的情况下,最多可以选择三个项目。目前,我有下面的代码C#ListView阻止选择

private void grassListView_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     string landType = this.grassLandTypeComboBox.Text; 
     if (this.grassListView.SelectedIndices.Count < 4) 
     { 
      ArrayList selectedGrassTextures = (ArrayList)((Hashtable)this.paintGrass[landType])["textures"]; 
      selectedGrassTextures.Clear(); 
      foreach (ListViewItem listViewItem in this.grassListView.SelectedItems) 
      { 
       selectedGrassTextures.Add(listViewItem.Text); 
      } 
     } 
     else 
     { 
      MessageBox.Show("You cannot have more than 3 grasses selected for any given attribute type"); 
     } 
    } 

此代码的工作,最后我selectedGrassTextures哈希表只有三个要素。然而,GUI仍然显示该元素(选择/专注?)。所以对用户来说,它似乎仍然被选中。所以我想避免这种情况,有没有什么我可以用来找到最后一个元素点击,并把它的选择或焦点。另一种方式是,如果有事件发生在SelectedIndexChanged之前,我可以将我的< 4签入。有没有这样的事件,我认为ListView.SelectedIndexChanging,但在我的IDE它显示为不存在。我正在使用visual studio express和framework 3.5,因此我无法使用4.5。

回答

1

在ItemSelectionChanged事件将这个:

private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) 
    { 
     if (listView1.SelectedItems.Count > 4) e.Item.Selected = false; 
    } 
+0

由于这似乎正确的方式去然而 System.InvalidCastException:无法投型“System.EventArgs”的对象键入.'System.Windows .Forms.ListViewItemSelectionChangedEventArgs'。 所以我猜这不是在框架3.5或我失去了一些东西 – kenny

+0

嗯,应该是,根据MSDN文档。你是否将它绑定到正确的事件? – TaW

+0

this.grassListView.SelectedIndexChanged + = new System.EventHandler(this.grassListView_SelectedIndexChanged);这是我的绑定,但嗯,有不同的控件不同的EventHandlers,或者它总是System.EventHandler?我是一个java开发人员,所以这些东西让我感到困惑 – kenny