【问题标题】:Displaying selected items of listbox into a message box in C# Windows Form在 C# Windows 窗体中将列表框的选定项目显示到消息框中
【发布时间】:2014-10-14 19:00:32
【问题描述】:

我可以在单击按钮时将列表框中的多个选定项目显示到文本框中,但是如何在消息框上显示相同的项目?我的意思是在消息框上显示第一个项目不是问题,但同时显示多个项目是。请提出建议...

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{

    Skill = checkedListBox1.SelectedItem.ToString();
    if (e.NewValue == CheckState.Checked)
    {
        listBox1.Items.Add(Skill);
    }
    else
    {
        listBox1.Items.Remove(Skill);
    }
}

private void button1_Click(object sender, EventArgs e)
{
    MessageBox.Show("You have selected following Skills : \n"+Skill, "Selected Skills",
    MessageBoxButtons.OK, MessageBoxIcon.Information);
}

【问题讨论】:

    标签: c# visual-studio-2008 listbox checkboxlist


    【解决方案1】:

    您没有显示Skill 的定义位置,但可能是该类的属性。您只需在 checkedListBox1_ItemCheck 中初始化 Skill。如果选择已更改,则该值将过时(它不会反映现实)。

    对代码的最短更改是不在按钮处理程序中使用Skill,而是从列表框中获取当前状态(如果您喜欢这种风格,可以将其放入局部变量中)。

    private void button1_Click(object sender, EventArgs e)
    {
        var selectedSkills = checkedListBox1.SelectedItem.ToString();
        MessageBox.Show("You have selected following Skills : \n"+selectedSkills, "Selected Skills",
        MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    

    【讨论】:

      【解决方案2】:

      您似乎正在用最后一个要检查的值覆盖Skill。因此,我希望消息框始终显示与您单击的最后一个项目相关的Skill。因此,如果要显示所有这些,则需要将 MessageBox.Show 调用中的 Skill 替换为 listBox1.Items.Cast<string>().Aggregate((o, n) => o.ToString() + "," + n.ToString()) 之类的内容

      *注意:将 Cast<string> 替换为 Skill 的任何类型的对象。

      如:

      private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
      {
          Skill = checkedListBox1.SelectedItem.ToString();
      
          if (e.NewValue == CheckState.Checked)
          {
              listBox1.Items.Add(Skill);
          }
          else
          {
              listBox1.Items.Remove(Skill);
          }
      }
      
      private void button1_Click(object sender, EventArgs e)
      {
          MessageBox.Show("You have selected following Skills : \n"+ listBox1.Items.Cast<string>().Aggregate((o, n) => o.ToString() + "," + n.ToString()), "Selected Skills",
          MessageBoxButtons.OK, MessageBoxIcon.Information);
      }
      

      【讨论】:

        【解决方案3】:

        您必须遍历选定的项目并将它们附加到您的文本框中。为了在消息框上显示,您需要将所选项目连接到一个字符串变量并将其用于您的消息。

        private void button1_Click(object sender, EventArgs e)
        {
            StringBuilder skills = new StringBuilder();
            foreach (object item in listBox1.SelectedItems)
            {
                skills.AppendLine(item.ToString());
            }
        
            MessageBox.Show("You have selected following Skills : \n" + skills.ToString(), "Selected Skills",
            MessageBoxButtons.OK, MessageBoxIcon.Information);
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-23
          • 1970-01-01
          • 1970-01-01
          • 2020-01-25
          • 1970-01-01
          • 1970-01-01
          • 2012-04-29
          • 1970-01-01
          相关资源
          最近更新 更多