如何在另一个班级中填写来自foreach的Combobox

时间:2018-03-01 12:54:17

标签: c# winforms list arraylist combobox

我正在尝试从单独的类文件填充comboBox和辅助表单,我认为我的基础错误。

以下内容缩短,以显示我所拥有的骨头以及我认为我可能做错的事情。我不确定我是否应该使用List<>填充comboBox或一个数组,并怀疑在任何一种情况下我的方法声明是错误的,我找不到对从foreach循环中填充的comboBox的引用。

确定我的设置表格的program.cs。这不是主要形式,但是当用户选择组合框时,我想要填充它。

Program.cs

class Settings
{
    public partial class Settings : Form
    {
        // a bunch of String declarations used throughout

        public Settings()
        {
            InitializeComponent();
        }
    }   
}

单独文件中类的方法是

Functions.cs

class functions
//This is a separate class to the Settings Form but same namespace.
{
    //some global variables here

    public string getDomain(string webURL)
    {
        //more variable declarations
        //webURL is a value from the Settings Form
        //code to send query to website, get the response and filter the response.
        //This is the response filter

        foreach (XmlNode node in xmlDoc.SelectNodes("//DAV:domains/DAV:domain", nsmgr))
        {
            strNode = node.InnerText;
            responseString += strNode + " ";
            list.Add(strNode);
            //I would like to simply Add.Items(strNode) to the Settings.Form.cbxDomains but not as simple as this.  
        }
        //this returns all the correct information as a space separated string.
        return responseString;       
    }
}           

来自Update UI from a different thread in a different class

我认为我应该做两件事。 1.将表单初始化从InitilizeComponents()更改为

 settingsWindow = new MyForm();
   Application.Run(form);  
  1. 然后只需致电Settings.settingsWindow.cbxDomain.Add>items(responseString); 但我是否还需要将实际方法更改为类似的方法 public void List<String> getDomain(string webURL)
  2. 我很困惑。大多数示例显示了从组合更新类的另一种方式,而不是其他方式,有些人说将其创建为数组。

    我实际上认为它甚至可以进一步削减为一行或两行而不是foreach,但这远远超出了我的技能。

1 个答案:

答案 0 :(得分:0)

以下是如何从其他表单填充组合框。 我将使用示例,因为我不知道你的代码结构,但你会明白这一点。

public class User //Custom generic class
{
    public int _Id { get; set; }
    public string _Name { get; set; }
}

public class Functions
{
    public static List<User> PopulateComboboxWithUsers()
    {
        List<User> list = new List<User>();
        foreach(var something in somethingBig) //You can change this if you re reading form XML with it's variables or something else
        {
            list.Add(new User { _Id = something.Id, _Name = something.Name };
        }
        return list;
    }
}

public class Settings
{
    public Settings()
    {
        InitializeComponents();
        comboBox1.DataSource = Functions.PopulateComboboxWithUser();
        comboBox1.DisplayMember = "_Name";
        comboBox1.ValueMember = "_Id";
    }
}

其他方法是执行相同的功能,期望您将comboBox传递给它,并且您将在其中进行分配,但我认为这更灵活。