11

我有一个 CheckBoxList 我正在填充数据。当我尝试从列表中检索选中的项目时,我只能获取项目序号,我无法获取值。

我读过你可以使用 Items[i].Value 但是当我尝试这样做时,我收到一个错误,指出没有扩展方法'value'。

这是我用来尝试获取信息的代码(注意 GetItemText(i) 实际上只给了我项目的位置,而不是项目的文本)

   private void btnGO_Click(object sender, EventArgs e)
{
    for (int i = 0; i < chBoxListTables.Items.Count; i++)
    {
        if (chBoxListTables.GetItemChecked(i))
        {
            string str = chBoxListTables.GetItemText(i);
            MessageBox.Show(str);

            //next line invalid extension method
            chBoxListTables.Items[i].value;
        }
    }
}

这是使用.Net 4.0

任何想法将不胜感激......谢谢

4

9 回答 9

17

这最终变得非常简单。chBoxListTables.Item[i] 是一个字符串值,显式转换允许将其加载到变量中。以下代码有效:

private void btnGO_Click(object sender, EventArgs e)
{
    for (int i = 0; i < chBoxListTables.Items.Count; i++)
    {
          if (chBoxListTables.GetItemChecked(i))
        {
            string str = (string)chBoxListTables.Items[i];
            MessageBox.Show(str);
        }
    }
}
于 2012-09-18T22:26:47.663 回答
4

尝试使用这个。

        for (int i = 0; i < chBoxListTables.Items.Count; i++)
        {
            if (chBoxListTables.Items[i].Selected)
            {
                string str = chBoxListTables.Items[i].Text;
                MessageBox.Show(str);

                var itemValue = chBoxListTables.Items[i].Value;
            }
        }

“V”值应使用大写字母。

这是 WinForm 应用程序中使用的另一个代码示例,并且运行正常。

        var chBoxList= new CheckedListBox();
        chBoxList.Items.Add(new ListItem("One", "1"));
        chBoxList.Items.Add(new ListItem("Two", "2"));
        chBoxList.SetItemChecked(1, true);

        var checkedItems = chBoxList.CheckedItems;
        var chkText = ((ListItem)checkedItems[0]).Text;
        var chkValue = ((ListItem)checkedItems[0]).Value;
        MessageBox.Show(chkText);
        MessageBox.Show(chkValue);
于 2012-09-14T18:10:58.780 回答
3

要检查项目,您可以使用CheckedItemsGetItemsChecked。我在 .NET 4.5 中尝试了以下代码

遍历CheckedItems集合。这将为您提供已检查项目列表中的项目编号,而不是整个列表。因此,如果列表中的第一项未选中而第二项已选中,则下面的代码将显示类似Checked Item 1 = MyListItem2.

//Determine if there are any items checked. 
if(chBoxListTables.CheckedItems.Count != 0)  
{
    //looped through all checked items and show results.
    string s = "";
    for (int x = 0; x < chBoxListTables.CheckedItems.Count; x++)
    {
        s = s + (x + 1).ToString() + " = " + chBoxListTables.CheckedItems[x].ToString()+ ", ";
    }
    MessageBox.Show(s);//show result
}

-或者-

单步执行 Items 集合并GetItemChecked为每个项目调用方法。这将为您提供整个列表中的项目编号,因此如果未选中列表中的第一个项目而选中第二个项目,它将显示类似Item 2 = MyListItem2.

int i;  
string s;   
s = "Checked items:\n" ;  
for (i = 0; i < checkedListBox1.Items.Count; i++)  
{  
   if (checkedListBox1.GetItemChecked(i))  
   {  
      s = s + "Item " + (i+1).ToString() + " = " + checkedListBox1.Items[i].ToString() + "\n";  
   }  
}  
MessageBox.Show (s);

希望这可以帮助...

于 2017-02-05T19:29:38.990 回答
1

//简单示例代码:

foreach (var item in YourCheckedListBox.CheckedItems)
{List<string>.Add(item);}
于 2017-05-05T17:42:48.353 回答
1

你可以试试这个: -

string values = "";
foreach(ListItem item in myCBL.Items){
if(item.Selected)
{
values += item.Value.ToString() + ",";  
}
}
values = values.TrimEnd(',');  //To eliminate comma in last.
于 2017-12-07T19:03:31.797 回答
0

而不是这个:

CheckboxList1.Items[i].value;

试试这个:

CheckboxList1.Items[i].ToString();

它对我有用:)

于 2013-09-12T18:25:10.037 回答
0

尝试使用这个:

 private void button1_Click(object sender, EventArgs e)
    {

        for (int i = 0; i < chBoxListTables.Items.Count; i++)
            if (chBoxListTables.GetItemCheckState(i) == CheckState.Checked)
            {
               txtBx.text += chBoxListTables.Items[i].ToString() + " \n"; 

            }
    }
于 2015-01-05T07:58:12.517 回答
0

您可以初始化一个字符串列表并添加那些被选中的项目。

请检查代码,对我来说很好。

List<string> modules = new List<string>();

foreach(ListItem s in chk_modules.Items)
{
    if (s.Selected)
    {
         modules.Add(s.Value);
    }
}
于 2018-03-11T12:18:44.347 回答
0

这将为您解决问题:

foreach (int indexChecked in checkedListBox1.CheckedIndices)
{
    string itemtxt = checkedListBox11.Items[indexChecked];
}

它将返回选中列表框项中的任何字符串值。

于 2021-02-11T22:43:16.713 回答