我试图从一个单独的类文件填充一个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);
Settings.settingsWindow.cbxDomain.Add>items(responseString);
但是我还需要将实际方法更改为像public void List<String> getDomain(string webURL)
这样的东西我感到很困惑。大多数示例显示了从组合更新类的另一种方式而不是其他方式,有些人说将其创建为数组。
我实际上认为它甚至可以进一步削减成一行或两行而不是foreach,但这在我看来已经超出了我的技能。
以下是如何从另一种形式填充组合框的方法。我将使用示例,因为我不知道你的代码结构,但你会明白这一点。
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
传递给它,你会在其中进行分配,但我认为这更灵活。