2013-03-12 55 views
-1

我有一个combobox说combobox1。我有4件物品。每当我选择一个项目时,我希望在标签文本上的combobox1中获得所选文本。 我试着用下面的代码来做这个,但它不起作用。从组合框提取项目到标签文本

cnt是指combobox1中的项目数。磅是标签的一个对象。

请帮助..

for (int i = 1; i <= cnt; i++) 
{ 
    lb.Text = comboBox1.Items[i].ToString(); 
} 
+0

'不起作用'从来不是一个好的解释,你是否得到任何错误,或者你的输出不是预期的。 – Habib 2013-03-12 07:37:01

+0

它也取决于你放入什么对象。作为列表框中的项目的对象应该有一个'ToString()'方法。但是如果底层对象类型没有实现'ToString()',那么你就不会在组合框中看到任何文本。但是为什么你要在label.text中循环并赋值(覆盖以前的值)呢?这根本没有意义。 – 2013-03-12 07:37:28

+0

@Habib:输出不是我所期望的。没有错误。但它不会返回任何标签文字 – user 2013-03-12 07:38:14

回答

1

多东西是你的代码错误:

  1. 指数是基于零的(至少在C#中是这样)。意思是你的for循环应该从0开始,而不是在1
  2. 您正在用for循环中的每次迭代覆盖标签中的Text值,这是没有意义的。使用Debug.PrintSystem.Diagnostics名称空间)来查看组合框项目的所有值。
  3. 您应该使用一个事件,当选择组合框中的项目时,标签的值会更新,请参阅此URL获取组合框的事件列表:http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.aspx。在代码中将事件处理程序附加到事件中,或者在Visual Studio的GUI设计器中执行。通常,您要使用SelectedIndexChanged事件:http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selectedindexchanged.aspx
  4. 确保组合框中的项目是实现ToString()的对象类型。否则,根本没有任何东西会显示在你的组合框中。
  5. 您当前的for循环想要在for循环的最后一次迭代中执行lb.Text = comboBox1.Items[comboBox1.Items.Count].ToString();。这将导致一个IndexOutOfRangeExceptionhttp://msdn.microsoft.com/en-us/library/system.indexoutofrangeexception.aspx
2

怎么样

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      lb.Text = comboBox1.Text; 
     } 
+0

不,它不起作用。它会返回system.data ... – user 2013-03-12 07:35:53

+0

'.Text'的工作原理,请尝试:) – Pyromancer 2013-03-12 07:37:07

+0

它在标签文本中显示System.Data.Data – user 2013-03-12 07:49:22

0

试试下面的代码:

for (int i = 0; i < cmbTest.items.count; i++) 
{ 
    label1.text = cmbTest.SelectedItem[i].toString(); 

} 
    //Or 
    label1.text = cmbTest.Text; 

    //Or 
    label1.text = cmbTest.selectedValue; 
+0

将值重新分配给for循环中标签的Text属性,而不使用先前分配的值为疯狂。你可以使用'label1.text = cmbTest.SelectedItem [cmbTest.items.count-1] .toString();'而不是使用相同的结果,并减少CPU使用率。 – 2013-03-12 08:04:00

+0

感谢Mike提供宝贵的信息。 – Freelancer 2013-03-12 08:06:03