[英]If I add a public method to a C# class, do I need to recompile other assemblies using that type?
[英]I need to pass a combobox to a class method using C#
我有一個自定義類,該類可以使用WMI處理我的串行COM端口的收集,該工作可以按預期進行。 現在,我想將WMI查詢值傳遞給我的組合框,而這在我不使用類時已經做到了。 但是,我試圖清理我的代碼並將節放置到一個類中。 我現在試圖通過傳遞組合框所在的Form對象,將組合框傳遞給位於單獨的.cs文件中的類方法。 我嘗試過: public void getSerialPorts(Form f)
,但是當我按f時。 我在Visual Studio創建的下拉列表中沒有看到我的組合框。 我認為我的組合對象沒有正確傳遞。 有人可以提供一個簡單的示例,說明如何將表單控制對象傳遞給類方法以稍后對其進行操作嗎?
代碼段:
Form1.cs的
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;
}
首先,您要傳遞Form
,它是System.Windows.Forms
Form
的基類。 它不會讓您訪問放置在表單上的組合。 您必須傳遞表單類型的參數(即MyCustomForm)。
然后,您的表單需要允許訪問此組合。 例如,您可以添加將返回它的屬性。 那將是最簡單的,而不是最好的。
但是如果不將表單傳遞給setup
類而不是將其傳遞給setup
類並返回您隨后將其放入組合的值,那就更好了。 此代碼將放置在computerButton_Click
方法中。
private void computerButton_Click(object sender, EventArgs e)
{
var serialPorts = bsetup.getSerialPorts();
// code to put serialPorts in combo
}
您的setup
類不應了解視覺控件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.