0

我是一个没有太多经验的休闲程序员。我很高兴我自己做到了这一点(当然,在这个网站和其他类似网站的帮助下)。但现在我需要一些帮助。

我创建了一个用户控件,其中包含多个文本框、蒙版文本框、组合框、一个复选框和 3 个按钮。

我创建了一个带有选项卡控件 (TabControl1) 的表单 (Form1),上面有一个选项卡页 (TabPage1)。我已将我的用户控件添加到 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

结束类

一旦我弄清楚了这一点,我应该很高兴,我应该能够自己搞定其余的事情。如果您想知道,我还将使用来自数据库的数据填充组合框的选项。然后,我将使用该表单获取其中的所有数据,并从数据库中添加、编辑或删除信息。

提前致谢。

4

2 回答 2

0

正如@HansPassant 所说,您只需向用户控件添加属性即可访问其中的控件。我不是 vb.net 的人,但我认为这会对你有所帮助:

Public Function MyTextbox() As System.Windows.Forms.TextBox
  Return Textbox1
End Function

您可以将其写入您的用户控制代码中。

于 2013-08-04T21:28:33.717 回答
0

好吧,也许我在我的帖子中不是最清楚的,或者我只是不明白封装的东西。我可以访问我的所有控件,因为它们是标准控件。我只需要知道如何获取父控件的名称,在本例中是名为 ContactTabX 的用户定义控件,其中 X = 1 到n控件,这些控件是在我按下添加按钮n次时添加的。我总是可以通过说诸如此类的话来访问它们ContactTab5.ckbDeleteContact.Visible = True。我不想硬编码,因为我不确定添加了多少个选项卡,所以我想要一种方法来知道按下按钮时我在哪个选项卡上,这样我就可以更改该特定选项卡上的复选框属性(因为每个选项卡相同)。

我花了几个小时试图弄清楚,这就是我在发布问题后大约 10 分钟能够弄清楚的(去图)。我希望这对其他人有帮助。对于你们那里的专家,对我的解决方案的任何反馈表示赞赏。我总是喜欢学习:)

因此,用这些替换我最初发布的潜艇非常有效。

 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)

    Dim Contact As ContactTab = TabControl1.SelectedTab.Controls.Item(0)
    Contact.Name = TabControl1.SelectedTab.Controls.Item(0).Name()
    Contact.ckbDeleteContact.Visible = False
    Contact.ckbDeleteContact.Checked = False
    Contact = Nothing
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)

    Dim Contact As ContactTab = TabControl1.SelectedTab.Controls.Item(0)
    Contact.Name = TabControl1.SelectedTab.Controls.Item(0).Name()
    Contact.ckbDeleteContact.Visible = True
    Contact.ckbDeleteContact.Checked = True
    Contact = Nothing
End Sub

再次感谢您的输入。

于 2013-08-05T06:26:42.180 回答