我是一个休闲程序员,没有太多的经验。我很高兴我自己做到了这一点(当然有来自这个网站和其他人的帮助)。但现在我需要一些帮助。访问控件位于动态创建的用户控件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