簡體   English   中英

我需要使用C#將組合框傳遞給類方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM