2016-01-15 121 views
0

我有一个LinkLabel,我在表单中动态添加了这个属性。只有当CheckBox被选中时,我的LinkLabel才会显示。我用这个LinkLabel在我的表格中添加一个TextBox和用户只能添加5最大TextBox。达到它的最大值后,LinkLabel将为已禁用(但尚未添加到我的编码中)。将LinkLabel1.Enabled属性设置为false(vb.net)

这是我目前使用的编码。

'This is my CheckBox 
Private Sub CheckBoxOthers_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBoxOthers.CheckedChanged 
    If CheckBoxOthers.Checked = True Then 
     PanelOthers.Visible = True 'My TextBox and LinkLabel are inside a Panel 

     Dim count As Integer = PanelOthers.Controls.OfType(Of Label)().ToList().Count 
     Dim textbox As New TextBox() 
     Dim linklabel1 As New LinkLabel() 

     count = PanelOthers.Controls.OfType(Of TextBox)().ToList().Count 
     textbox.Location = New System.Drawing.Point(15, 40 * count) 
     textbox.Size = New System.Drawing.Size(172, 20) 
     textbox.Name = "textbox_" & (count + 1) 
     AddHandler textbox.TextChanged, AddressOf TextBox_Changed 
     PanelOthers.Controls.Add(textbox) 

     'Adding LinkLabel dynamically 
     linklabel1.Name = "lnkAddSubj" 
     linklabel1.Text = "Add Subject" 
     linklabel1.Location = New Point(300, 3) 
     AddHandler linklabel1.Click, AddressOf linklabel1_Click 
     PanelOthers.Controls.Add(linklabel1) 
    Else 
     PanelOthers.Visible = False 
     PanelOthers.Controls.Clear() 
    End If 
End Sub 

这里是我的LinkLabel事件点击时添加文本框,5次最大,但我还没有添加代码来设置的限制尚未

Private Sub linklabel1_Click(sender As Object, e As EventArgs) 
    Dim count As Integer = PanelOthers.Controls.OfType(Of Label)().ToList().Count 
    Dim textbox As New TextBox() 

    count = PanelOthers.Controls.OfType(Of TextBox)().ToList().Count 
    textbox.Location = New System.Drawing.Point(15, 40 * count) 
    textbox.Size = New System.Drawing.Size(172, 20) 
    textbox.Name = "textbox_" & (count + 1) 
    AddHandler textbox.TextChanged, AddressOf TextBox_Changed 
    PanelOthers.Controls.Add(textbox) 

    'So here after LinkLabel clicked 5 times then my LinkLabel will be disabled and I'm trying to do like this but it said LinkLabel1 is not declared 
    LinkLabel1.Enabled = False 
End Sub 

如何使LinkLabel特性能够要设置?我能写它的Click事件,因为我在CheckBox事件中为它添加了一个处理程序

回答

0

此行

'So here after LinkLabel clicked 5 times then my LinkLabel will be disabled and I'm trying to do like this but it said LinkLabel1 is not declared 
LinkLabel1.Enabled = False 

说是LinkLabel1是根本不存在,因为你动态

'Adding LinkLabel dynamically 
linklabel1.Name = "lnkAddSubj" 
linklabel1.Text = "Add Subject" 
linklabel1.Location = New Point(300, 3) 
AddHandler linklabel1.Click, AddressOf linklabel1_Click 
PanelOthers.Controls.Add(linklabel1) 

声明您linkLabel1在linklabel1_Click,你应该用你的sender代替。它转换为LinkLabel

Private Sub linklabel1_Click(sender As Object, e As EventArgs) 
    Dim linkLbl As LinkLabel = sender 'do this 
    Dim count As Integer = PanelOthers.Controls.OfType(Of Label)().ToList().Count 
    Dim textbox As New TextBox() 

    count = PanelOthers.Controls.OfType(Of TextBox)().ToList().Count 
    textbox.Location = New System.Drawing.Point(15, 40 * count) 
    textbox.Size = New System.Drawing.Size(172, 20) 
    textbox.Name = "textbox_" & (count + 1) 
    AddHandler textbox.TextChanged, AddressOf TextBox_Changed 
    PanelOthers.Controls.Add(textbox) 

    'So here after LinkLabel clicked 5 times then my LinkLabel will be disabled and I'm trying to do like this but it said LinkLabel1 is not declared 
    'put if condition here to check if the textBox number already >= 5 
    linkLbl.Enabled = False 'change this using the actual sender 
End Sub  

此外,作为一个侧面的问题:你需要动态地添加你的链接标签多次,每次CheckedChanged事件发生?这对我来说似乎不是一个很好的做法。

+0

你好,谢谢你的回复。我只需要1个'LinkLabel'用于我的表单。如果你有一个好的和简单的编码,我应该善意地与我分享。我正在尝试改进我的编码。 – Emerald

+0

如果你只需要一个,最简单的方法就是在你的'designer'中创建一个,而不是动态编码,我想。通过使用Visual Studio的'designer'页面来创建它,你甚至不需要编写代码来创建。你只需拖放。您只需要为其“Click”事件创建事件处理程序代码 - 我向您展示的代码。 – Ian

+0

哦,是的,你真的是对的。因为我正在考虑动态添加全部内容,所以我甚至不考虑这个小巧的智能解决方案。顺便谢谢你:) – Emerald

相关问题