【问题标题】:Foreach selected item in Listbox?Foreach 列表框中的选定项目?
【发布时间】:2023-04-01 15:25:01
【问题描述】:

我有一个对话框,用于选择要显示的表单。原来只是从组合框中选择,现在我们需要选择多个,所以我们将其改为列表框。

这是我们用于组合框的方法:

if (view.ShowDialog() == DialogResult.OK)
{          
    if (view.FormType == "Form1")
        return new Form1_Controller();
    else if (view.FormType == "Form2")
        return new Form2_Controller();
    else if (view.FormType == "Form3")
        return new Form3_Controller();
    else return null;
}
else
{
    return null;
}

我们如何将它封装在一个循环中,为每个选择返回一个控制器?

例如,我尝试过类似的方法

foreach (ListBoxItem listItem in view.ListBox1)
{
    //do if (view.FormType == "Form1")
}

但我不知道使用正确的语法。

【问题讨论】:

  • 假设您使用的是 WPF,请为 ListBox1 添加 XAML
  • @SaagarEliasJacky 抱歉,我使用的是 WinForms,而不是 WPF
  • 您要同时显示所有表单还是一个接一个?
  • @Anand 将所有选定的表格放在一起。因此,如果用户选择 1 和 3,它将同时显示两个表单。

标签: c# winforms


【解决方案1】:

要同时打开所有表单,我会尝试类似这样的不同方法

ArrayList controllersSelected = new ArrayList();

foreach (var item in view.ListBox1.SelectedItems)
    GetSelectedItem(item.Value, out controllersSelected);

//Your logic to display selected forms simultaneously
DisplaySimultaneousForms(controllersSelected);

private void GetSelectedItem(formName, out ArrayList list)
{
  if (view.FormType == "Form1")
    list.Add(new Form1_Controller());
  else if (view.FormType == "Form2")
    list.Add(new Form2_Controller());
  else if (view.FormType == "Form3")
    list.Add(new Form3_Controller());
}

【讨论】:

【解决方案2】:

使用SelectedItems:

foreach (var item view.ListBox1.SelectedItems)
    SelectForm(item.ToString());


void SelectForm(string value)
{
    if(value == "Form1")
        return new Form1_Controller();
    ...
}

【讨论】:

    【解决方案3】:

    您可以使用以下代码:

    foreach (var item in view.ListBox1.SelectedItems)
    {        
        ShowForm(item.Value);
    }
    
    private void ShowForm(formName)
    {
      if (view.FormType == "Form1")
        return new Form1_Controller();
      else if (view.FormType == "Form2")
        return new Form2_Controller();
      else if (view.FormType == "Form3")
        return new Form3_Controller();
      else return null;
    }
    

    【讨论】:

    • 您在寻找这样的东西吗?
    • 您可以使用 var 代替它,也可以使用列表框的 SelectedItems
    • @Peyman,您的代码错过了 foreach 循环中的“in”关键字,我刚刚编辑了它,这也不会同时打开所有表单
    • 谢谢@Anand,我修好了
    【解决方案4】:
    private void button1_Click(object sender, EventArgs e)
      {
         for (int i = 0; i <= listBox1.SelectedItems.Count - 1; i++) 
          {
               switch (listBox1 .Items [i].ToString ())
                    {
                        case "FirstForm":
                            Form2 frm2 = new Form2();
                            frm2.Show();
                            break;
                        case "SecondForm":
                            Form3 frm3 = new Form3();
                            frm3.Show();
                            break;
                        default:
                            break;
                   }
           }
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多