2017-03-09 20 views
-1

我有一個串行程序,我用它來發送數據到打印機。 (Epson TM虛擬端口分配工具版本8.50) 在這種情況下,用於USB打印機的COM9,用於以太網打印機的COM13和用於以太網打印機的COM15用於COM端口並行打印機。我知道這聽起來很奇怪,但效果很好。 我的問題是我有一個簡單的foreach循環來獲取COM端口名稱。 我需要知道如何在組合框中重命名它們。 private string [] openComPorts = SerialPort.GetPortNames(); foreach(var openComPorts中的項) { comboBox1.Items.Add(item); }重命名COM端口後,我已經讀了他們的名字

所以現在我的comboBox1顯示COM1,COM3,COM4,COM9,COM13,COM15。 如何重命名COM9,13,15? 我想讓他們說COM9-USB,COM13-以太網,COM15-並行 任何幫助,將不勝感激。 目標PC運行的是Windows 7,.NET 4.x版,SP1

+0

你知道你要使用的自定義名稱提前時間? (I.E. COM9-USB) – BackDoorNoBaby

+0

是的,COM9-USB,COM13-Ethernet,COM15-Parallel,這樣用戶不需要記住哪些是哪個。 –

+0

您是否需要組合框中的所有COM端口,或僅需要您想要自定義名稱的COM端口? – BackDoorNoBaby

回答

0

只是做一個字典使用查表爲您的端口:

 string[] openComPorts = SerialPort.GetPortNames(); 
    Dictionary<string, string> dctLookups = new Dictionary<string, string>(); 

    // Loop through each COM port name and add to dictionary, giving 
    // it your custom name 
    foreach (string comPort in openComPorts) 
    { 
     // local variable to hold standard name of your port 
     string portName = comPort; 

     // Check for one of the ports you want a custom name for 
     if (comPort == "COM9") 
     { 
      portName += "-USB"; 
     } 
     else if (comPort == "COM13") 
     { 
      portName += "-Ethernet"; 
     } 
     else if (comPort == "COM15") 
     { 
      portName += "-Parallel"; 
     } 

     // Add to <key,value> dictionary with key being portName 
     dctLookups.Add(portName, comPort); 

     // Add custom name to combobox 
     comboBox1.Items.Add(portName); 
    } 

    // Get the actual COM port out of your dictionary like this 
    try 
    { 
     string comPort = dctLookups[comboBox1.SelectedItem.ToString()]; 
    } 
    catch (Exception) 
    { 
     // Port name not in your lookup table 
    } 
+0

這允許您維護一個表,其中的鍵是您分配的自定義值,並且該值是實際的COM端口名稱。對於你不關心的COM端口,密鑰和值將是相同的 – BackDoorNoBaby

+1

工作100%,實際上我正在尋找,非常感謝! :) –