C# 我需要使用C向类方法传递一个组合框
我有一个自定义类,它使用WMI处理串行COM端口的收集,WMI的工作方式与预期一致。现在,我想将WMI查询值传递给我的组合框,我在不使用类时已经这样做了。然而,我正试图清理我的代码并将部分放入类中。我现在试图通过传递combobox所在的Form对象,将combobox传递给位于单独的.cs文件中的类方法。我尝试了:public void getSerialPortsForm f,但当我按f时。我在VisualStudio创建的下拉列表中看不到我的组合框。我认为我的combo对象传递不正确。有人能给出一个简单的例子,说明如何将表单控件对象传递给类方法,以便以后对其进行操作吗 代码段: 表格1.csC# 我需要使用C向类方法传递一个组合框,c#,winforms,class,object,controls,C#,Winforms,Class,Object,Controls,我有一个自定义类,它使用WMI处理串行COM端口的收集,WMI的工作方式与预期一致。现在,我想将WMI查询值传递给我的组合框,我在不使用类时已经这样做了。然而,我正试图清理我的代码并将部分放入类中。我现在试图通过传递combobox所在的Form对象,将combobox传递给位于单独的.cs文件中的类方法。我尝试了:public void getSerialPortsForm f,但当我按f时。我在VisualStudio创建的下拉列表中看不到我的组合框。我认为我的combo对象传递不正确。有人
private void computerButton_Click(object sender, EventArgs e)
{
bsetup.getSerialPorts(this);
}
setup.cs
public void getSerialPorts(Form f)
{
try
{
string wmiresult;
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE Caption like '%mbed% %Serial% %Port% %(COM%'");
foreach (ManagementObject queryObj in searcher.Get())
{
wmiresult = queryObj["Caption"].ToString();
// Here we call Regex.Match.
Match match = Regex.Match(wmiresult, @"\bCOM\d+\b");
// Here we check the Match instance.
if (match.Success)
{
//combo.Add(queryObj["Caption"].ToString(), match.Value);
//comboBox1.Items.Add();
MessageBox.Show(match.Value);
}
}
}
catch (ManagementException er)
{
MessageBox.Show("An error occurred while querying for WMI data: " + er.Message);
}
}
工作示例
private void computerButton_Click(object sender, EventArgs e)
{
var ports = bsetup.getSerialPorts();
comboBox1.DataSource = ports;
//MessageBox.Show(ports.Count.ToString());
}
public IList<string> getSerialPorts()
{
List<string> serialPortResult = new List<string>();
try
{
string wmiresult;
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE Caption like '%mbed% %Serial% %Port% %(COM%'");
foreach (ManagementObject queryObj in searcher.Get())
{
wmiresult = queryObj["Caption"].ToString();
// Here we call Regex.Match.
Match match = Regex.Match(wmiresult, @"\bCOM\d+\b");
// Here we check the Match instance.
if (match.Success)
{
//combo.Add(queryObj["Caption"].ToString(), match.Value);
//comboBox1.Items.Add();
MessageBox.Show(match.Value);
serialPortResult.Add(match.Value);
}
}
}
catch (ManagementException er)
{
MessageBox.Show("An error occurred while querying for WMI data: " + er.Message);
}
return serialPortResult;
}
首先,您要传递表单,它是System.Windows.forms中表单的基类。它不会让您访问您在表单上放置的组合。您必须传递表单类型的参数,即MyCustomForm 然后您的表单需要允许访问此组合。例如,您可以添加将返回它的属性。这将是最简单的,而不是最好的 但如果您不将表单传递给设置类,而是调用它并返回值,然后将这些值放入combo中,这会更好。此代码将放置在计算机按钮单击方法中
您的安装类不应该知道可视化控件。您是在询问//combo.AddqueryObj[Caption].ToString部分吗?谢谢您的帮助。我用我的代码编辑了我的原始帖子。
private void computerButton_Click(object sender, EventArgs e)
{
var serialPorts = bsetup.getSerialPorts();
// code to put serialPorts in combo
}