我是一個休閒程序員,沒有太多的經驗。我很高興我自己做到了這一點(當然有來自這個網站和其他人的幫助)。但現在我需要一些幫助。訪問控件位於動態創建的用戶控件vb.net
我用幾個文本框,蒙面文本框,組合框,複選框和3個按鈕創建了一個用戶控件。
我已經創建了一個窗體(Form)與具有(TabPage1)就可以了1標籤頁的選項卡控件(TabControl1)。我已將我的用戶控件添加到TabPage1,並且控件採用名稱ContactTab1。這是通過VB.net表單設計完成的,而不是通過代碼完成的。
當我跑我的形式我有代碼,這樣,當我點擊我的添加按鈕,它增加了添加到它(無論我可以是在其標籤)與我的用戶控制的另一個選項卡。它工作的很好,我可以添加儘可能多的選項卡。當我點擊我的編輯或刪除按鈕時,他們工作得很好,因爲我知道按鈕被點擊時哪個選項卡處於打開狀態。我的問題是,當我點擊編輯按鈕時,我需要在單擊該按鈕的選項卡上設置ckbDeleteContact.Checked = False
和ckbDeleteContact.Visible = False
。當我點擊刪除按鈕時,我需要在單擊該按鈕的選項卡上設置ckbDeleteContact.Checked = True
和ckbDeleteContact.Visible = True
。我可以訪問第一個選項卡上的複選框,但語句ContactTab1.ckbDeleteContact.Checked = False
沒有問題。
所以我的問題是,我該如何訪問所有這些文本框,掩碼文本框,組合框,並在這些動態添加控件我的複選框?下面是我爲Form1的代碼和我都談到了我所需要的工作:
Public Class Form1
Private intTabPage As Integer = 1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
TabPage1.Text = "Contact #" & intTabPage
ContactTab1.ckbDeleteContact.Checked = False
ContactTab1.ckbDeleteContact.Visible = False
TabPage1.Name = "TabPage" & intTabPage
intTabPage = intTabPage + 1
End Sub
Private Sub UC_btnAddContact_Click() Handles ContactTab1.UC_btnAddContact_Click
AddNewTab()
End Sub
Private Sub UC_btnEditContact_Click() Handles ContactTab1.UC_btnEditContact_Click
'**DEBUG: See which tab the button is on when clicked
MessageBox.Show("The edit button from the following tab was clicked: " & TabControl1.SelectedTab.Name() & vbCrLf & "The edit button on the following contact tab was clicked: " & TabControl1.SelectedTab.Controls.Item(0).Name(), "Check", MessageBoxButtons.OK, MessageBoxIcon.Information)
'This code is what needs to work. ContactTabObject would have naming convention "ContactTabX" where X = the tab # 1 through the highest tab #
'ContactTabObject.ckbDeleteContact.Checked = False
'ContactTabObject.ckbDeleteContact.Visible = False
End Sub
Private Sub UC_btnDeleteContact_Click() Handles ContactTab1.UC_btnDeleteContact_Click
'**DEBUG: See which tab the button is on when clicked
MessageBox.Show("The delete button from the following tab was clicked: " & TabControl1.SelectedTab.Name() & vbCrLf & "The delete button on the following contact tab was clicked: " & TabControl1.SelectedTab.Controls.Item(0).Name(), "Check", MessageBoxButtons.OK, MessageBoxIcon.Information)
'This code is what needs to work. ContactTabObject would have naming convention "ContactTabX" where X = the tab # 1 through the highest tab #
'ContactTabObject.ckbDeleteContact.Visible = True
'ContactTabObject.ckbDeleteContact.Checked = True
End Sub
Function AddNewTab()
Dim NewTab As New TabPage
Dim NewContactTab As New ContactTab
TabControl1.Controls.Add(NewTab)
TabControl1.SelectTab(NewTab)
NewTab.Text = "Contact #" & intTabPage
NewTab.BackColor = System.Drawing.Color.Transparent
NewTab.Controls.Add(NewContactTab)
NewTab.Name = "TabPage" & intTabPage
NewContactTab.Location = New System.Drawing.Point(6, 6)
NewContactTab.BackColor = System.Drawing.Color.Transparent
NewContactTab.ckbDeleteContact.Checked = False
NewContactTab.ckbDeleteContact.Visible = False
AddHandler (NewContactTab.btnAddContact.Click), AddressOf UC_btnAddContact_Click
AddHandler (NewContactTab.btnEditContact.Click), AddressOf UC_btnEditContact_Click
AddHandler (NewContactTab.btnDeleteContact.Click), AddressOf UC_btnDeleteContact_Click
NewContactTab.Name = "ContactTab" & intTabPage
intTabPage = intTabPage + 1
End Function
末級
一旦我得到這個想通了,我應該去的好,我應該能夠得到自行休息。如果你想知道,我也會用數據庫中的數據填充我的組合框的選項。然後,我將使用表單來獲取其中的所有數據,並添加,編輯或刪除數據庫中的信息。
在此先感謝。
當您將控件放在UserControl * private *中時,將很容易將這些鴨子保持連續。封裝很重要。添加您自己的公共屬性和事件。 –
感謝漢斯,但就像我說的,我不是很有經驗。不完全確定如何做到這一點。但是難道你不知道嗎,我在發佈之後就明白了。也許我可以封裝更好,因爲我繼續前進...大聲笑 – Jeremy
我會告訴你我用過的所有答案。顯然不能做7個小時;) – Jeremy