2016-01-15 6 views
0

У меня есть LinkLabel, который я добавил динамически в свою форму. Мой LinkLabel будет отображаться только при проверке CheckBox. Я использовал это 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 событие, чтобы добавить TextBox при нажатии, в 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 никогда не существовало, потому что вы объявить 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_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 для ее создания, вам даже не нужно создавать код для создания. Вы просто перетаскиваете. Вам нужно только создать код обработчика событий для своего события «Click» - того, что я вам показал. – Ian

+0

О да, да, вы действительно правы. Потому что я собираюсь добавить все динамически, поэтому я даже не думаю об этом маленьком умном решении. Кстати спасибо вам большое :) – Emerald