Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c listbox selected更改行事件起作用,但未选择行_C#_Winforms_Datagridview - Fatal编程技术网

C# c listbox selected更改行事件起作用,但未选择行

C# c listbox selected更改行事件起作用,但未选择行,c#,winforms,datagridview,C#,Winforms,Datagridview,我有个问题。我有三个主要类别的按钮,当你点击其中一个按钮时,一些东西会出现在列表框中,带有子类别的按钮也会出现。若单击子类别,列表框中会出现不同的内容 我有这样的方法: private void DisplayPeople(string category); //I use it ParentClicked and SubClicked private void ParentClicked(object sender, EventArgs e); //for parent category pr

我有个问题。我有三个主要类别的按钮,当你点击其中一个按钮时,一些东西会出现在列表框中,带有子类别的按钮也会出现。若单击子类别,列表框中会出现不同的内容

我有这样的方法:

private void DisplayPeople(string category); //I use it ParentClicked and SubClicked
private void ParentClicked(object sender, EventArgs e); //for parent category
private void SubCatClicked(object sender, EventArgs e); //for subcategory
myListBox.SelectedIndexChanged+= new EventHandler(selectedIndexChange); 
当您在列表框中选择某个内容时,它应该会出现在我的DataGridView中,并且工作得非常好。然而,当我点击按钮时,列表框中出现了一些东西,我把类似myListBox.ClearSelected的东西放进去;或my.SelectedItem=null;我看到在开始时没有选择任何内容,但SelectedIndexChange事件仍然有效,因为它将第一行添加到我的DataGridView中。我不知道为什么,你能帮我吗

要短得多: 在我的程序中,当您在列表框中选择某个内容时,它将显示在DataGridView中。当我设置myListBox.ClearSelected时;或my.SelectedItem=null;,开始时未选择任何内容,但SelectedIndexChange事件起作用,并且列表框中的第一个内容添加到DataGridView。我不希望这样,我希望它仅在用户选择时显示在datagridview中

现在,我的事件处理程序如下所示:

private void selectedIndexChange(object sender, EventArgs e)
{
  Person person = (Person)MyListBox.SelectedItem;
  if (MyListBox.Items.Count > 0 && MyListBox.SelectedItems.Count > 0)
        {
            Basket.Add(person);
            dataGridView1.DataSource = Basket;
        }
    }
附言。 我解决了这个问题。当用户单击listbox并显示SelectedIndexChange事件时,我将listbox中的内容添加到DataGridView中。但也许有更简单、更漂亮的解决方案?

这正是SelectedIndexChanged的工作原理

您需要做的是将myListBox.SelectedIndex与-1或myListBox.SelectedItem与null进行比较,以查看列表框中是否确实选择了某些内容

像这样试试

 private void myListBox_SelectedIndexChanged(object sender, EventArgs e)
  {
        if (myListBox.Items.Count > 0 && myListBox.SelectedItems.Count > 0)
        {
            //Do something in DatagridView
        }
        else
        {
            //clear the gridview
        }           
   }

请在列表框的SelectedIndex Change事件中显示代码…我更新了我的主要帖子;它也不起作用。。。但是我想问题出在哪里了。当我单击一个按钮时,selectedindexchange事件会出现两次!起初它选择了editems.count=1,然后将某个id添加到dataGridView中,然后在secomd selecteditems.count=0之后……我认为这是因为我清除所选索引的次数太多了,但当我只清除一次时,selectedindexchange仍然可以工作两次。。。