【问题标题】:Putting multiple labels in a second form以第二种形式放置多个标签
【发布时间】:2023-03-12 05:26:01
【问题描述】:

大家好,我想问一下,这是否是一个很好的代码,可以使用一个按钮将多个标签放在第二个表单中,并使用第一个表单中的文本?在此先感谢大家,祝大家编码愉快。

    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

结束类

问题解决了..非常感谢 Sir Plutonix 和 Steve 的帮助,我真的很感激 :) 我接受了 Plutonix 的建议,使用多个文本框而不是一个文本框,我在开始我的项目时使用了 Steve 的示例代码。 . 再次感谢:)

【问题讨论】:

  • 也许如果您在创建第二个标签之前删除返回 :-)
  • @Steve 无法访问已处置的对象。对象名称:'Form2'。
  • 删除返回并添加lbl = New Label,但它会具有相同的文本
  • @Plutonix 先生,在我删除它们之后它仍然是一样的。
  • 您的意思是frm2?没有名为 Form2 的对象。但是您确定这是此过程中的所有代码吗?你从哪里得到那个 frm2 变量?

标签: vb.net winforms forms


【解决方案1】:

您需要声明一个全局类级别变量来保持对您的 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

【讨论】:

  • 是的,先生,这是一个很好的代码,但我在 form1 中有文本框,它将使文本显示在 form2 的标签上:)
  • 不,先生,我的意思是当我将其更改为 textbox1.text 时,它只会显示我创建的第一个标签,它会覆盖第二个标签。谢谢:)
  • 如果将相同的textbox.text分配给两个不同的标签(注意我创建了一个不同名称的新标签,我没有重复使用相同的标签)
  • 是的,先生,这就是问题所在,我需要将文本放在同一个文本框上,这让我进退两难……谢谢 :)
  • 为第二个标签添加另一个文本框或制作标签工厂要容易得多。问题是您需要的不仅仅是不同的文本:位置必须改变,而 form1(?) 没有这种能力
【解决方案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  

【讨论】:

  • 它并没有解决问题,它仍然覆盖了我创建的先前标签。但我会坚持你的建议,在第一个表单上制作许多文本框,以使问题不那么复杂。非常感谢伙计 :)
  • 有一个编辑 - 看到 'LabelCount +=1` 我一开始忘记了
  • 是的,即使我包含 labelcount +=1 它仍然表现相同我不知道为什么我只是认为这个问题太复杂了,现在人类无法解决我认为只有超人才能解决这个问题这就是为什么你刚才的建议真的让我印象深刻,让生活更轻松,只需在第一种形式上制作多个 TB:p
猜你喜欢
  • 1970-01-01
  • 2018-05-21
  • 2011-07-19
  • 2018-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
相关资源
最近更新 更多