第一个问题我以前写过,不过是vb的,你模仿一下就可以,主要原理是读注册表。
------------------------------
Public Sub GetCommPortInfo(udtArr() As CommInfo)
    Dim hKey As Long
    Dim lCount As Long
    Dim strName As String
    Dim strData As String
    Dim lRetName As Long
    Dim lRetData As Long
    Dim strValName As String
    Dim strValTemp As String
    Dim lValType As Long
    Dim lResult As Long
    
    Dim bFirst As Boolean
    bFirst = True
    
    'Open a registry key
    If RegOpenKey(HKEY_LOCAL_MACHINE, "Hardware\DeviceMap\SerialComm", hKey) = 0 Then
        'initialize
        strName = Space(BUFFER_SIZE)
        strData = Space(BUFFER_SIZE)
        lRetName = BUFFER_SIZE
        lRetData = BUFFER_SIZE
    
        'enumerate the values
        While RegEnumValue(hKey, lCount, strName, lRetName, 0, REG_SZ, ByVal strData, lRetData) <> ERROR_NO_MORE_ITEMS
            'show data
            If lRetData > 0 Then
                'prepare for next value
                If (Not bFirst) Then ReDim Preserve udtArr(UBound(udtArr) + 1)
                If bFirst Then bFirst = False
                
                'build the return array
                udtArr(UBound(udtArr)).strPortName = Left(strData, lRetData)
                udtArr(UBound(udtArr)).nPortNo = lCount + 1
                
                lCount = lCount + 1
                strName = Space(BUFFER_SIZE)
                strData = Space(BUFFER_SIZE)
                lRetName = BUFFER_SIZE
                lRetData = BUFFER_SIZE
            End If
        Wend
        
        'Close the registry key
        RegCloseKey hKey
    Else
        MsgBox "Error while calling RegOpenKey", vbOKOnly, "Error"
    End If
End Sub
------------------------------

解决方案 »

  1.   

    搞这么深,还初学者?学习ing~~~
      

  2.   

    combox不是有个记录选项的序号属性吗?
    button中,调用一个自定义函数,参数为combox的选项序号,如:
    public void Init(int ComboxIndex)
    不知道行不行
      

  3.   

    public void Serialini(string port, System.IO.Ports.Parity parity, int baudrate, int databits, System.IO.Ports.StopBits stopbits)
            {
                try
                {
                     int count = serial.Count;
                     if (count < 8)
                     {
                         SerialPort serialport = new SerialPort();
                         serialport.PortName = port;
                         serialport.Parity = parity;
                         serialport.BaudRate = baudrate;
                         serialport.DataBits = databits;
                         serialport.StopBits = stopbits;
                         serialport.ReadBufferSize = 64; ;                 
                         serialport.Open();
                         MessageBox.Show("初始化成功:该串口已经打开!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                         serial.Add(serialport);   // ArrayList serial = new ArrayList()存放的串口对象,这样能不能那得出来各个串口啊?                 
                     }
                }
                catch (Exception Err)
                {
                    MessageBox.Show("初始化失败:" + Err.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
            }
      

  4.   

    参数为combox的选项序号,如:
    public void Init(int ComboxIndex)
    不就是判断一个string么?
    Serialini(string port, System.IO.Ports.Parity parity, int baudrate, int databits, System.IO.Ports.StopBits stopbits) 中的string port是不是就可以判断了?这个string来自combox。我用serial.Add(serialport);   
    // ArrayList serial = new ArrayList()存放的串口对象,这样能不能拿出来串口使用啊?