簡體   English   中英

檢查下拉列表是否已包含動態添加的項目

[英]Check if a drop down list already contains a dynamically added item

我正在將系統上可用的現有COM端口添加到下拉列表中。 到目前為止,我有這個:

private void Form1_Load(object sender, EventArgs e)
{ 
    foreach (string port in System.IO.Ports.SerialPort.GetPortNames())
    {
        ToolStripMenuItem t = new ToolStripMenuItem();
        t.Text = port;
        t.Checked = port == notifier.COMPort;
        t.Click += t_Click;
        setPortToolStripMenuItem.DropDownItems.Add(t);
    }
}

這在最初添加端口時有效,但是我想在用戶單擊我的下拉框以顯示端口之前再次檢查已添加或刪除的COM端口。

我看到我可以使用setPortToolStripMenuItem.DropDOwnItems.ContainsKey()但我不知道它添加時它使用了什么鍵。

這不起作用:

private void setPortToolStripMenuItem_DropDownOpening(object sender, EventArgs e)
{
    string[] ports = System.IO.Ports.SerialPort.GetPortNames();

    foreach (string s in ports)
    {
        if (!setPortToolStripMenuItem.DropDownItems.ContainsKey(s))
        {
            ToolStripMenuItem t = new ToolStripMenuItem();
            t.Text = s;
            t.Checked = s == notifier.COMPort;
            t.Click += t_Click;
            setPortToolStripMenuItem.DropDownItems.Add(t);
        }
    }
}

我可以指定添加項目時使用的密鑰,還是有另一種檢查現有項目的方法?

使ContainsKey工作

嘗試在ToolStripMenuItem上設置Name -property:

ToolStripMenuItem t = new ToolStripMenuItem();

t.Name = port; // Set the name of the ToolStripMenuItem to the port.

t.Text = port;
t.Checked = port == notifier.COMPort;
t.Click += t_Click;
setPortToolStripMenuItem.DropDownItems.Add(t);

然后ContainsKey(s)將工作:

foreach (string s in ports)
{
    if (!setPortToolStripMenuItem.DropDownItems.ContainsKey(s))
    {
        //....
    }
}

用Linq做的

您還可以使用Linq獲取ToolStrip中不存在的所有端口:

string[] ports = System.IO.Ports.SerialPort.GetPortNames();

var existingPorts = setPortToolStripMenuItem.DropDownItems
    .OfType<ToolStripMenuItem>()
    .Select(t => t.Text); // Or t.Name if you set that.

var portsToAdd = ports.Except(existingPorts);

現在,不在下拉列表中的所有端口都將在portsToAdd ,因此您可以添加它們而無需檢查更多。

了解更多關於Linq的信息

是的,你可以這樣檢查 -

bool alreadyExist = setPortToolStripMenuItem.DropDownItems
                     .OfType<ToolStripItem>()
                      .Any(item => item.Text.Equals(s));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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