-2

我在通过搜索浪费时间后发布了这个并且没有得到正确的答案。

我的要求是创建一个许可系统。表单上有一个 tabcontrol,当我单击“New Permit”按钮(位于 tabcontrol 上方的表单顶部)时,应该会打开一个带有文本框的新选项卡(名为“NEW Permit”)。每次单击“新许可”按钮时,将并行打开相同类型的选项卡。当我们选择一个选项卡并填写文本字段并单击“颁发许可证”按钮(位于表格顶部的选项卡控件上方)时,应关闭选项卡,同时将文本字段中的数据保存到具有专用许可证号的访问数据库.

我已经创建了表单和“新许可”、“发布许可”按钮和选项卡控件位于用户控件“ucPermit”上。我对创建这些动态选项卡并将其上的数据输入数据库感到震惊。

''''''''''附件''''''''''''''''''''''''''''''''''''

@DonA

我在表格上有两个面板。面板 01(左侧)具有“摘要、许可、LOTO、HotWork”按钮。当单击每个按钮时,相应的用户控件(在运行时加载到右侧的面板 02)出现在前面。

Public Class Home
    Dim ucSummary As New ucSummary
    Dim ucPermitMain As New ucPermitMain
    Dim ucLotoMain As New ucLotoMain
    Dim ucHotWorkMain As New ucHotWorkMain

Private Sub Home_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    lblDate.Text = Format(Now, "MMMM dd, yyyy")
    lblTime.Text = Format(Now, "h:mm tt")
    btnSummary.BackColor = Color.LightGreen
    Panel2.Controls.Add(ucSummary)
    ucSummary.Dock = DockStyle.Fill
    Panel2.Controls.Add(ucPermitMain)
    ucPermitMain.Dock = DockStyle.Fill
    Panel2.Controls.Add(ucLotoMain)
    ucLotoMain.Dock = DockStyle.Fill
    Panel2.Controls.Add(ucHotWorkMain)
    ucHotWorkMain.Dock = DockStyle.Fill
End Sub

Private Sub btnSummary_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSummary.Click
    btnSummary.BackColor = Color.LightGreen
    btnPermit.BackColor = Color.LightBlue
    btnLoto.BackColor = Color.LightBlue
    btnHotWork.BackColor = Color.LightBlue
    ucSummary.BringToFront()
End Sub

Private Sub btnPermit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPermit.Click
    btnSummary.BackColor = Color.LightBlue
    btnPermit.BackColor = Color.LightGreen
    btnLoto.BackColor = Color.LightBlue
    btnHotWork.BackColor = Color.LightBlue
    ucPermitMain.BringToFront()
End Sub

Private Sub btnLoto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoto.Click
    btnSummary.BackColor = Color.LightBlue
    btnPermit.BackColor = Color.LightBlue
    btnLoto.BackColor = Color.LightGreen
    btnHotWork.BackColor = Color.LightBlue
    ucLotoMain.BringToFront()
End Sub

Private Sub btnHotWork_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHotWork.Click
    btnSummary.BackColor = Color.LightBlue
    btnPermit.BackColor = Color.LightBlue
    btnLoto.BackColor = Color.LightBlue
    btnHotWork.BackColor = Color.LightGreen
    ucHotWorkMain.BringToFront()
End Sub
End Class

我刚刚开始,目前正在研究与 ucPermitMain 用户控件一起使用的 Permit 部分。它在顶部有一个工具条 (tsPermit),在下面有一个空的选项卡控件 (tcPermit)。工具条有按钮“NewPermit、Issue、Close”(现在..更多随设计而来)每次单击 NewPermit 时,新选项卡会同时打开并带有文本框。单击选中特定的选项卡和“问题”时,“选定”选项卡的文本框上的数据要放入数据库“ ptw.accdb”,&TAB将关闭。

Public Class ucPermitMain
   Dim PTW As New OleDb.OleDbConnection
   Dim ucPermit As New ucPermit
   Dim txtbox As New TextBox

Public Sub New()
    ' This call is required by the designer.
    InitializeComponent()
    ' Add any initialization after the InitializeComponent() call.
    PTW = New OleDb.OleDbConnection
    PTW.ConnectionString = "Provider=Microsoft.ACE.Oledb.12.0; Data Source=" & Application.StartupPath & "\PTW.accdb"
End Sub

Public Sub tsbtnNewPermit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsbtnNewPermit.Click
    tsbtnClose.Visible = True
    tsbtnClose.Enabled = True

    Dim CTP As New CustomTabPage("New PTW", New Object)
    Me.tcPermit.TabPages.Add(CTP)
    tcPermit.SelectTab(tcPermit.TabPages.Count - 1)
End Sub

Public Sub tsbtnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsbtnClose.Click
    tcPermit.TabPages.RemoveAt(tcPermit.SelectedIndex)
    'This bottom code is telling it to remove the selected tab and countdown minus (-) 1 (one)
    If tcPermit.TabPages.Count > 0 Then
        tcPermit.SelectTab(tcPermit.SelectedIndex)
    Else
        tsbtnClose.Visible = False
        tsbtnClose.Enabled = False
    End If
End Sub

Public Sub tsbtnIssue_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsbtnIssue.Click
    Dim cmd As New OleDb.OleDbCommand
    Dim CTB As CustomTextBox
    If Not PTW.State = ConnectionState.Open Then
        'open connection if it is not yet open
        PTW.Open()
    End If

    cmd.Connection = PTW
    cmd.CommandText = "INSERT INTO tblPermit(ptwNo)" & _
                        "VALUES('" & ?????????????? & "')"
    cmd.ExecuteNonQuery()
End Sub
End Class

CustomTextBox 和 CustomTabPage 是用于创建这些自定义控件的两个单独的类。

 Imports System.Windows.Forms
Public Class CustomTabPage
 Inherits TabPage

Public Sub New(ByVal Name As String, ByVal NewConstruct As Object)
    InitTextBox(1)
    Me.Text = Name
End Sub

Private Sub InitTextBox(ByVal Num As Integer)
    Dim LocX As Integer = 10
    Dim LocY As Integer = 10
    Dim CTB As New CustomTextBox("")
    CTB.Location = New System.Drawing.Point(LocX, LocY)
    Me.Controls.Add(CTB)
End Sub
End Class

 Imports System.Windows.Forms
Public Class CustomTextBox
 Inherits TextBox

Public Sub New(ByVal Name As String)
    Me.Text = Name
End Sub
End Class

这是我到目前为止所做的唯一代码,它们可能没有优化。希望你能花时间去经历。

4

1 回答 1

0

这里的教训是有一个Data Layer,这一层有将数据保存到数据库的所有方法和逻辑。构建新选项卡后,您有一个属性允许它访问Data Layer. 它甚至可能需要一些封装(UserControl),并具有一组用于保存/验证数据的相同逻辑的控件。

您还应该显示一些代码 - 在寻求帮助之前您的努力。

于 2013-08-05T04:28:04.553 回答