Vb.net 动态创建选项卡控件页,添加富文本框,并连接到特定的串行端口
我有一个带有tabcontrol的表单(默认情况下没有选项卡)。在表单加载时,另一个表单打开,询问需要哪个交换机和多少端口。根据需要的端口数量,在选项卡控件中为每个需要的端口创建选项卡页。创建选项卡页面后,将添加richtextbox。在该文本框中,我需要连接到特定的串行端口,并将信息输出到richtextbox。特定的串行端口随选项卡页的变化而变化,并基于最初选择的交换机。例如,如果我选择了交换机1,并且需要3个端口,则3个选项卡应打开,选项卡1应连接到交换机1/1(在我的电脑上实际上是com35),选项卡2应连接到交换机1/2(在我的电脑上是com36),依此类推。附件是我所有的代码 主要形式:Vb.net 动态创建选项卡控件页,添加富文本框,并连接到特定的串行端口,vb.net,Vb.net,我有一个带有tabcontrol的表单(默认情况下没有选项卡)。在表单加载时,另一个表单打开,询问需要哪个交换机和多少端口。根据需要的端口数量,在选项卡控件中为每个需要的端口创建选项卡页。创建选项卡页面后,将添加richtextbox。在该文本框中,我需要连接到特定的串行端口,并将信息输出到richtextbox。特定的串行端口随选项卡页的变化而变化,并基于最初选择的交换机。例如,如果我选择了交换机1,并且需要3个端口,则3个选项卡应打开,选项卡1应连接到交换机1/1(在我的电脑上实际上是com
Imports System
Imports System.IO.Ports
Public Class Main
Public Property t_startForm As Object
Sub Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
t_startForm = GetStartForm()
Dim t_tabList As List(Of Integer) = GetTabs.SetTabs()
For Each t_tab In t_tabList
Dim page As New TabPage(String.Format("RCP" & t_startForm.getRCP & " - Port #" & t_tab & ""))
TabControl1.TabPages.Add(page)
Dim ctrlSiteSpecific As SiteSpecific = New SiteSpecific
page.Controls.Add(ctrlSiteSpecific)
ctrlSiteSpecific.Dock = DockStyle.Top
Dim rtbTab As LoggerBox = New LoggerBox
page.Controls.Add(rtbTab)
rtbTab.Dock = DockStyle.Bottom
rtbTab.Name = "rtbRCP" & t_startForm.GetRCP & ""
'THIS IS WHERE I WANT IT TO CONNECT TO A SERIAL PORT'
Next
End Sub
Function GetStartForm() As Object
Dim t_startForm As Start = New Start
t_startForm.ShowDialog()
Return t_startForm
End Function
End Class
起始形式
Public Class Start
Public Function GetRCP() As Integer
If cbRCP.SelectedItem = Nothing Then Return Nothing
Return cbRCP.SelectedItem
End Function
Private Sub cbRCP_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbRCP.SelectedIndexChanged
Dim t_rcp As Integer = cbRCP.SelectedItem
End Sub
Public Function GetPorts() As Integer
If cbPorts.SelectedItem = Nothing Then Return Nothing
Return cbPorts.SelectedItem
End Function
Private Sub cbPorts_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbPorts.SelectedIndexChanged
Dim t_Ports As Integer = cbPorts.SelectedItem
End Sub
Private Sub Submit_Click(sender As Object, e As EventArgs) Handles Submit.Click
Me.Close()
End Sub
Private Sub Cancel_Click(sender As Object, e As EventArgs) Handles Cancel.Click
Application.Exit()
End Sub
End Class
Imports System.IO.Ports
获取标签类
Public Class GetTabs
Public Shared Function SetTabs() As List(Of Integer)
Dim t_tabs As New List(Of Integer)
Select Case Main.t_startForm.GetPorts()
Case 1
With t_tabs
.Add(1)
End With
Case 2
With t_tabs
.Add(1)
.Add(2)
End With
Case 3
With t_tabs
.Add(1)
.Add(2)
.Add(3)
End With
Case 4
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
End With
Case 5
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
End With
Case 6
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
.Add(6)
End With
Case 7
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
.Add(6)
.Add(7)
End With
Case 8
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
.Add(6)
.Add(7)
.Add(8)
End With
Case 9
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
.Add(6)
.Add(7)
.Add(8)
.Add(9)
End With
Case 10
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
.Add(6)
.Add(7)
.Add(8)
.Add(9)
.Add(10)
End With
Case 11
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
.Add(6)
.Add(7)
.Add(8)
.Add(9)
.Add(10)
.Add(11)
End With
Case 12
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
.Add(6)
.Add(7)
.Add(8)
.Add(9)
.Add(10)
.Add(11)
.Add(12)
End With
Case 13
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
.Add(6)
.Add(7)
.Add(8)
.Add(9)
.Add(10)
.Add(11)
.Add(12)
.Add(13)
End With
Case 14
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
.Add(6)
.Add(7)
.Add(8)
.Add(9)
.Add(10)
.Add(11)
.Add(12)
.Add(13)
.Add(14)
End With
Case 15
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
.Add(6)
.Add(7)
.Add(8)
.Add(9)
.Add(10)
.Add(11)
.Add(12)
.Add(13)
.Add(14)
.Add(15)
End With
Case 16
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
.Add(6)
.Add(7)
.Add(8)
.Add(9)
.Add(10)
.Add(11)
.Add(12)
.Add(13)
.Add(14)
.Add(15)
.Add(16)
End With
Case 17
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
.Add(6)
.Add(7)
.Add(8)
.Add(9)
.Add(10)
.Add(11)
.Add(12)
.Add(13)
.Add(14)
.Add(15)
.Add(16)
.Add(17)
End With
Case 18
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
.Add(6)
.Add(7)
.Add(8)
.Add(9)
.Add(10)
.Add(11)
.Add(12)
.Add(13)
.Add(14)
.Add(15)
.Add(16)
.Add(17)
.Add(18)
End With
Case 19
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
.Add(6)
.Add(7)
.Add(8)
.Add(9)
.Add(10)
.Add(11)
.Add(12)
.Add(13)
.Add(14)
.Add(15)
.Add(16)
.Add(17)
.Add(18)
.Add(19)
End With
Case 20
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
.Add(6)
.Add(7)
.Add(8)
.Add(9)
.Add(10)
.Add(11)
.Add(12)
.Add(13)
.Add(14)
.Add(15)
.Add(16)
.Add(17)
.Add(18)
.Add(19)
.Add(20)
End With
Case 21
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
.Add(6)
.Add(7)
.Add(8)
.Add(9)
.Add(10)
.Add(11)
.Add(12)
.Add(13)
.Add(14)
.Add(15)
.Add(16)
.Add(17)
.Add(18)
.Add(19)
.Add(20)
.Add(21)
End With
Case 22
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
.Add(6)
.Add(7)
.Add(8)
.Add(9)
.Add(10)
.Add(11)
.Add(12)
.Add(13)
.Add(14)
.Add(15)
.Add(16)
.Add(17)
.Add(18)
.Add(19)
.Add(20)
.Add(21)
.Add(22)
End With
Case 23
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
.Add(6)
.Add(7)
.Add(8)
.Add(9)
.Add(10)
.Add(11)
.Add(12)
.Add(13)
.Add(14)
.Add(15)
.Add(16)
.Add(17)
.Add(18)
.Add(19)
.Add(20)
.Add(21)
.Add(22)
.Add(23)
End With
Case 24
With t_tabs
.Add(1)
.Add(2)
.Add(3)
.Add(4)
.Add(5)
.Add(6)
.Add(7)
.Add(8)
.Add(9)
.Add(10)
.Add(11)
.Add(12)
.Add(13)
.Add(14)
.Add(15)
.Add(16)
.Add(17)
.Add(18)
.Add(19)
.Add(20)
.Add(21)
.Add(22)
.Add(23)
.Add(24)
End With
End Select
Return t_tabs
End Function
End Class
以及我试图使用什么来构建我的串行端口列表
Imports System
Imports System.ComponentModel
Imports System.Threading
Imports System.IO.Ports
Public Class GetPorts
#Region "RCP01"
Public Shared Function GetRCP1Ports() As List(Of IO.Ports.SerialPort)
Dim t_RCP1 As New List(Of IO.Ports.SerialPort)
With t_RCP1
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
.Add(New IO.Ports.SerialPort)
End With
If Main.t_startForm.getRCP = 1 Then
t_RCP1(1).PortName = "COM35"
t_RCP1(2).PortName = "COM36"
t_RCP1(3).PortName = "COM37"
t_RCP1(4).PortName = "COM38"
t_RCP1(5).PortName = "COM39"
t_RCP1(6).PortName = "COM40"
t_RCP1(7).PortName = "COM41"
t_RCP1(8).PortName = "COM42"
t_RCP1(9).PortName = "COM43"
t_RCP1(10).PortName = "COM44"
t_RCP1(11).PortName = "COM45"
t_RCP1(12).PortName = "COM46"
t_RCP1(13).PortName = "COM47"
t_RCP1(14).PortName = "COM48"
t_RCP1(15).PortName = "COM49"
t_RCP1(16).PortName = "COM50"
t_RCP1(17).PortName = "COM51"
t_RCP1(18).PortName = "COM52"
t_RCP1(19).PortName = "COM53"
t_RCP1(20).PortName = "COM54"
t_RCP1(21).PortName = "COM55"
t_RCP1(22).PortName = "COM56"
t_RCP1(23).PortName = "COM57"
t_RCP1(24).PortName = "COM58"
End If
Return t_RCP1
End Function
#End Region
End Class
如何设置每个新创建的选项卡页,以读取要分配相应串行端口以打开通信的交换机和端口号?这是一个不好的设计(我的意见),它需要解决一些问题。。。为什么要这样设计?您不需要在这些选项卡页面中放置任何内容,而是创建它们来容纳2个控件。如果可以的话,为什么不以一种形式处理呢?好的,那么我应该如何设计它呢?我试图使每个选项卡都成为自己的网络设备配置环境,它们需要使用不同的串行端口来实现这一点。每个选项卡页面上的文本框将填充im连接到的网络设备的输出。