1
Tabcontrolを使用してtuntimeで作成したすべてのタブページは、 「.count - 1" であることは、それが唯一の2ボタンを表示するようにlimtedされているようなものだが、私は私のプログラム内のすべてのコードをチェックし、何も何もかもを制限されていないボタンがあるすべての私のタブページは、実行時にTabcontrolを使って作成します。私のデータベースにも3番目のボタンを表示できません。
Imports System.Data.OleDb
Public Class Services
Dim con = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = Cypher.mdb;"
Dim cnnOledb As New OleDbConnection
Dim cmdload As New OleDbCommand
Dim cmdInsert As New OleDbCommand
Public categoryName As String
Private Sub Services_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.CenterToScreen()
cnnOledb.ConnectionString = con
cnnOledb.Open()
cmdload.CommandText = "Select * From [Services]"
cmdload.Connection = cnnOledb
Max()
Tab()
add_btn()
End Sub
Private Sub Max()
Dim cmdMax As New OleDbCommand
cmdMax.CommandText = "Select MAX(id) from Services"
cmdMax.Connection = cnnOledb
Try
Dim dr As OleDbDataReader = cmdMax.ExecuteReader()
If dr.Read = True Then
If dr(0).ToString = "" Then
txtID.Text = "1"
Else
txtID.Text = dr(0) + 1.ToString
End If
End If
Catch
MsgBox("Error !")
End Try
End Sub
Private Sub Tab()
cobCategory.Items.Clear()
TabCategory.TabPages.Clear()
Dim cmdCategory As New OleDbCommand
cmdCategory.CommandText = "Select * from Category"
cmdCategory.Connection = cnnOledb
Dim dt As New DataTable
dt.Load(cmdCategory.ExecuteReader)
For i As Integer = 0 To dt.Rows.Count - 1
Dim tab As New TabPage()
tab.Name = "tab" + dt.Rows(i).Item(1).ToString
tab.Text = tab.Name.Remove(0, 3)
cobCategory.Items.Add(dt.Rows(i).Item(1).ToString)
TabCategory.TabPages.Add(tab)
Next
TabCategory.TabPages.Add("+")
End Sub
Private Sub add_btn()
Dim dt As New DataTable
dt.Load(cmdload.ExecuteReader)
Dim myFont As System.Drawing.Font
myFont = New System.Drawing.Font("Century Gothic", 12)
For i As Integer = 0 To dt.Rows.Count - 1
Dim btn As New Button()
btn.Name = "btn" + dt.Rows(i).Item(2).ToString
btn.Text = btn.Name.Remove(0, 3)
btn.Height = 30
btn.Width = 90
btn.Location = New Point(0, 10)
If TabCategory.TabPages((dt.Rows(i).Item(1)) - 1).Controls.count <> 0 Then
btn.Left += 100
End If
btn.Font = myFont
TabCategory.TabPages((dt.Rows(i).Item(1)) - 1).Controls.Add(btn)
Next
End Sub
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
Try
cmdInsert.CommandText = "Insert into [Services] values(" & txtID.Text & ", " & cobCategory.SelectedIndex + 1 & ", '" & txtServices.Text & "', " & txtDur.Text & ", " & txtPrices.Text & ");"
cmdInsert.CommandType = CommandType.Text
cmdInsert.Connection = cnnOledb
cmdInsert.ExecuteNonQuery()
Catch ex As Exception
MsgBox("Fail to insert data")
End Try
End Sub
Private Sub TabCategory_Click(sender As Object, e As EventArgs) Handles TabCategory.Click
If TabCategory.SelectedTab Is TabCategory.TabPages(TabCategory.TabPages.Count - 1) Then
New_Category.ShowDialog()
End If
End Sub
Public Sub New_Cate()
Dim cmdMax As New OleDbCommand
cmdMax.CommandText = "Select MAX(ID) from Category"
cmdMax.Connection = cnnOledb
Dim ID As Integer
Try
Dim dr As OleDbDataReader = cmdMax.ExecuteReader()
If dr.Read = True Then
If dr(0).ToString = "" Then
ID = 1
Else
ID = dr(0) + 1
End If
End If
Catch
MsgBox("Error !")
End Try
Dim cmdAddCategory As New OleDbCommand
Try
cmdAddCategory.CommandText = "Insert into [Category] values(" & ID & ", '" & categoryName & "');"
cmdAddCategory.CommandType = CommandType.Text
cmdAddCategory.Connection = cnnOledb
cmdAddCategory.ExecuteNonQuery()
Catch ex As Exception
MsgBox("Fail to insert new category")
End Try
Tab()
End Sub
End Class
おかげで男!あなたのコードを理解したいので、間違っていれば私の修正をしてください。つまり、TabPagesの各コントロールには独自のインデックスがありますか?また、実行時に最初に作成されたコントロールのインデックスは0ですか?これにより、Controls.Count - 1を実行して、最後のコントロールのインデックスを取得できます。そして、最後のコントロールの左値+100を取得しますか? –
はい、まさに正しいです。このコードでは、タブページにこれらのボタンしかないことを前提としています。他のコントロールを使用している場合は、インデックスが異なる場合があります。これを行うもう1つの方法は、変数を使用して最後のbtn.Leftを追跡し、100に変数を追加して、代わりにループするときに次のbtn.Leftを作成することです。 –
ありがとう、あなたはとても親切で、私のために説明しようとしています。実行時にコントロールを配置/配置するという概念をよく理解するのに役立ちました。 TYVM –