Почему вся моя закладка, созданная во время tuntime с помощью Tabcontrol, не может показать мою третью кнопку, даже если она есть в моей базе данных? Это как это время Limted, чтобы показать только 2 кнопки, но я проверил каждый код в моей программе, ничто не ограничивает Everythings является».count - 1"Все мои закладки создаются во время выполнения, используя Tabcontrol не может показать третью кнопку, даже если у меня она есть в моей базе данных
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? А затем получите последнее значение управления .Left + 100? –
Да, точно. Имейте в виду, что этот код предполагает, что у вас есть только эти кнопки на вкладке ... если у вас есть другие элементы управления, индексы могут быть разными. Другой способ сделать это - использовать переменную для отслеживания последнего btn.Left и добавить 100 к переменной, а затем сделать следующий btn.Left, когда вы зацикливаете. –
Спасибо, много чувак, ты очень добрый и желающий объяснить мне. Это очень помогло мне понять концепцию размещения/размещения элементов управления во время выполнения. TYVM –