如何在另一个类中填充来自foreach的Combobox

问题描述 投票:0回答:1

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

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

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

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.将表单初始化从InitializeComponents()更改为

 settingsWindow = new MyForm();
   Application.Run(form);  
  1. 然后简单地调用Settings.settingsWindow.cbxDomain.Add>items(responseString);但是我还需要将实际方法更改为像public void List<String> getDomain(string webURL)这样的东西

我感到很困惑。大多数示例显示了从组合更新类的另一种方式而不是其他方式,有些人说将其创建为数组。

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

c# winforms list arraylist combobox
1个回答
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传递给它,你会在其中进行分配,但我认为这更灵活。

© www.soinside.com 2019 - 2024. All rights reserved.