2014-02-05 3 views
0

Привет, ребята, я просто хотел бы спросить, хороший ли это код для размещения нескольких меток во второй форме с текстом из первой формы с помощью одной кнопки? Спасибо заранее и счастливое кодирование для всех.Вставка нескольких меток во вторую форму

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 

Dim lbl As Label = New Label  'Create your Label 
    'change the location..  
    lbl.Location = New Point(50, 50) 'Set Label Location 
    lbl.Text = TextBox1.Text   'Set Label Text 
    lbl.ForeColor = Color.Black  'Set Label ForeColor 
    frm2.Controls.Add(lbl)   'Add Label to it 

    Return 

    'change the location..  
    lbl.Location = New Point(10, 20) 'Set Label Location 
    lbl.Text = TextBox1.Text   'Set Label Text 
    lbl.ForeColor = Color.Black  'Set Label ForeColor 
    frm2.Controls.Add(lbl)   'Add Label to it 

    Return 

End Sub 

он показывает только первый ярлык, но он не показывает следующие метки, которые я вход ...

Form2 кода

Public Class Form2 
Public lbl As New Label 
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Me.Controls.Add(lbl) 

End Sub 

End класс решаемые

проблемы. . Большое спасибо сэру Плутонису и Стиву за их помощь. Я очень ценю это. Я принял предложение Plutonix использовать несколько текстовых полей, а не одно текстовое поле, и я использовал образец кода o f Steve в начале моего проекта .. Еще раз спасибо :)

+1

Возможно, если вы удалите возвращение до создания второго лейбла :-) – Steve

+0

@Steve Не удается получить доступ к объекту, расположенную. Название объекта: 'Form2'. – TheNewbie

+0

удалите return AND добавьте 'lbl = New Label', но он будет иметь тот же текст – Plutonix

ответ

2

Вам нужно объявить глобальную переменную уровня класса, которая хранит ссылку на ваш Form2, тогда, когда вы нажимаете кнопку, а глобальная переменная уровня класса ничего (первая время создания) вы создаете экземпляр Form2, добавляете метки и, самое главное, добавляете обработчик событий, который будет вызываться, когда экземпляр frm2 будет закрыт. Затем покажите форму и выведите ее на первый план.
Если ваш пользователь отскакивает от кнопки, новая форма не будет создана (frm2 в данный момент ничего не значит), вместо этого, если ваш пользователь закроет frm2, будет вызываться обработчик событий, и вы сбросите внутреннюю переменную уровня класса в ничего. Теперь, если вы пользователь снова нажмет на кнопке, frm2 будет воссоздан

Private frm2 As Form2 

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 

    if frm2 Is Nothing then 
     frm2 = new Form2 
     AddHandler frm2.FormClosed, AddressOf Me.Form2HasBeenClosed 

     Dim lbl As Label = New Label  
     lbl.Location = New Point(50, 50) 
     lbl.Text = "FirstLabelText" 
     lbl.ForeColor = Color.Black  

     frm2.Controls.Add(lbl)   

     Dim lbl2 = New Label 
     lbl2.Location = New Point(10, 20) 
     lbl2.Text = "TextForSecondLabel" 
     lbl2.ForeColor = Color.Black  
     frm2.Controls.Add(lbl2)   
    End if 

    frm2.Show() 
    frm2.BringToFront 
End Sub 

Sub Form2HasBeenClosed(sender As Object, e As FormClosedEventArgs) 
    frm2 = Nothing 
End Sub 


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
    if frm2 IsNot Nothing Then 
     frm2.Show(Me)   'Show Second Form 
    End If  
End Sub 
+0

да, сэр это хороший код, но у меня есть текстовое поле в форме1, которое сделает текст на этикетке на form2 :) – TheNewbie

+0

Ну, это было просто для ясности, измените его на TextBox1.Text ... – Steve

+0

Нет сэра Я имею в виду, когда я меняю его на textbox1.text, он просто покажет первый ярлык, который я создал, и он перезапишет второй. спасибо :) – TheNewbie

2
Private LabelCount As Integer = 0 

Private Sub Button3_Click(yada yada yada 

' I think this is actually fixing a nonexistant problem 
' stemming from misunderstanding the issue 
if frm2 Is Nothing then 
    frm2 = new Form2 
    AddHandler frm2.FormClosed, AddressOf Me.Form2HasBeenClosed 

    Dim lbl As Label = New Label 
    lbl.Text = TextBox1.Text 
    lbl.ForeColor = Color.Black 

    Select Case LabelCount 
     Case 0 
      lbl.Location = New Point(50, 50) 
     Case 1 
      lbl.Location = New Point(10, 20) 

     Case Else 
      ' not specified 
      Exit Sub 
    End Select 
    LabelCount +=1     ' dont forget this 
    frm2.Controls.Add(lbl) 

End if 

frm2.Show() 
frm2.BringToFront 
End Sub 
+0

он не исправляет проблему, он по-прежнему тот же, что и перезаписывает предыдущий ярлык, который я создал. Но я просто буду придерживаться вашего предложения сделать много текстовых полей на первой форме, чтобы проблема была не такой сложной. Многие благодарны :) – TheNewbie

+0

было редактирование - см. «LabelCount + = 1», я забыл его сначала – Plutonix

+0

Да, даже я включаю labelcount + = 1, он по-прежнему действует так же, я не знаю, почему я просто думаю, что эта проблема слишком сложна для человека, чтобы решить прямо сейчас. Я думаю, что только сверхчеловек может решить это, поэтому ваше предложение в то время как я действительно ударил меня в голову, чтобы облегчить жизнь, просто сделайте несколько ТБ в первой форме: p – TheNewbie

Смежные вопросы