2014-02-05 37 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 

它只显示第一个标签,但它并不能表明我将输入...

窗口2码

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 

末级

问题解决的下一个标签。 。非常感谢Plutonix爵士和Steve的帮助,我非常感谢:)我接受了Plutonix的建议,使用多个文本框而不是一个文本框,并使用示例代码o ˚F史蒂夫在开始我的项目..再次感谢:)

+1

也许,如果删除了创建第二个标签的:-) – Steve

+0

@Steve无法访问已释放的对象之前的回报。 对象名称:'Form2'。 – TheNewbie

+0

删除返回并添加'lbl =新标签',但它将具有相同的文本 – Plutonix

回答

2

你需要声明的是保持一个参考到你的窗体2全球一流水平的变量,那么当你点击按钮和全球一流水平的变量是什么(第一时间创建)创建Form2实例,添加标签,最重要的是添加一个事件处理程序,该程序将在frm2实例关闭时调用。然后展示形式并将其带到最前沿。
如果您的用户reclicks上的按钮,一个新的形式将不会被创建(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

是的,先生,这是一个很好的代码,但我已经在Form1的文本框,这将使文戏的标签上的窗口2 :) – 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它仍然行为相同我不知道为什么我只是认为这个问题太复杂了,现在人类解决我认为只有超人才能解决这个问题,这就是为什么你的建议而我之前真的让我感到头疼,为了让生活变得更轻松,只需在第一种形式上制作多个TB:p – TheNewbie