2017-11-04 105 views
0

我试图从一个单独的事件中获取动态制作的组合框中的项目的值。我需要把用户选择的值放入一个字符串中,但我找不到一种方法来实现它。这是一个例子。如何获取C#中动态生成的控件的值?

  ComboBox player1Role = new ComboBox(); 
     player1Role.Width = 100; 
     player1Role.Items.Add("Top"); 
     player1Role.Items.Add("Jungle"); 
     player1Role.Items.Add("Mid"); 
     player1Role.Items.Add("Bot"); 
     player1Role.Items.Add("Support"); 
     player1Role.Items.Add("Fill"); 
     player1Role.Location = new Point(200, 200); 

然后在下面点击事件,我需要得到他们所选择的价值:

 private void CreateParty_Click(object sender, EventArgs e) 
    { 

     ComboBox player1SelectedRole = (ComboBox)Controls["player1Role"]; 
     string player1roleString = player1SelectedRole.Items[0].ToString(); 
     MessageBox.Show(player1roleString); 
    } 

该代码只是给了我一个异常说player1SelectedRole是空的。我究竟做错了什么?

回答

0

您正在通过名称查找控件,但是您没有为控件指定名称。

player1Role.Name = "player1Role"; 

另外,我觉得player1SelectedRole.Items[0]总是要选择第一项,无论哪一个是实际选择的。改为player1SelectedRole.SelectedItem

+0

关于SelectedItem你的权利,但即使我分配一个名称,我仍然得到相同的结果。 –

+0

我刚刚测试过@劳伦斯。我得到一个没有名字的例外,但它可以与它一起工作。如果不是这样,那么别的东西就是错的。 CreateParty_Click方法附带了什么事件? –

+0

啊,你的正确,对不起。你的.name修正了它,我的问题是我在form1中寻找控件,而不是它附加到的实际东西,因此为什么它显示为空。改变它并添加你的.name修复它,谢谢你的帮助! –

相关问题