【问题标题】:Reset form with original state以原始状态重置表单
【发布时间】:2018-02-18 15:21:02
【问题描述】:

我想使用 vb.net 重置我的表单,我会尝试下面的代码,但表单已关闭,无法打开新表单。

Private Sub resert_button_Click(sender As Object, e As EventArgs) Handles resert_button.Click
        Dim client = New client_entry
        client.Show()
        Me.Close()
End Sub

【问题讨论】:

  • 我假设client_entry 是您的第一个表单或您尝试打开的表单的名称。尝试将Dim client_entry = New client_entryclient_entry.Show() 更改为Dim client = New client_entryclient.Show()
  • @ArunKumar 感谢您的帮助,但它不起作用。

标签: vb.net winforms reset


【解决方案1】:

尝试Me.Hide 并交换订单

Me.Hide()
client.Show()

【讨论】:

    【解决方案2】:

    可能有多种方法来处理这个,但我的方法就像调用 form_shown 一样,即使我将加载所需的数据并且在重置期间我会调用此事件。

    Private Sub Me_Shown(sender As Object, e As EventArgs) Handles Me.Shown
       LoadData() 'This function/sub will load data for this form
    End Sub
    
    Private Sub resert_button_Click(sender As Object, e As EventArgs) Handles resert_button.Click
            Me_Shown(sender,e) 
    End Sub
    

    【讨论】:

    • 这将是您在表单加载时加载数据的函数/子
    【解决方案3】:

    使用 Me.Dispose() 而不是 Me.Close() 它会处理表单,然后当您再次调用 Yourform.Show() 时,它将生成一个新表单。

    【讨论】:

      【解决方案4】:

      这样做的一种方法是向 Form2 添加一个属性。我假设您有两个表单让我们称它们为 Form1 和 Form2。在 Form1 的代码中的某处,您声明了 Form2 的一个实例 ..

      Dim frm2 As New Form2
      

      并且在某些时候您希望将 Form2 显示为模式窗口 ..

      frm2.ShowDialog()
      

      现在让我们看看 Form2 代码

      我在这里假设您有一个重置表单和关闭表单的按钮,您只需单击右上角的表单关闭按钮,也许您也有一个关闭表单的按钮。考虑 Form2 的以下代码

      Public Class Form2
      
          Friend Property resetOnClose As Boolean = False
      
          Private Sub btnReset_Click(sender As Object, e As EventArgs) Handles btnReset.Click
              resetOnClose = True
              Me.Hide()
          End Sub
      
          Private Sub btnclose_Click(sender As Object, e As EventArgs) Handles btnclose.Click
              resetOnClose = False
              Me.Hide()
          End Sub
      End Class
      

      有一个名为resetOnclose 的属性,它是一个布尔类型。如果单击重置按钮,则该属性设置为True 如果单击关闭按钮,则resetOnClose 属性设置为false。

      在所有这些代码中,frm2 是隐藏的——没有关闭。这意味着表单及其resetOnclose 属性仍可用于Form1。好了,现在看看 Form1 代码..

      Public Class Form1
          Dim frm2 As New Form2
      
          Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Shown
              frm2.ShowDialog()
              Do
                  If frm2.resetOnClose Then
                      frm2.Close()
                      frm2 = New Form2
                      frm2.ShowDialog()
                  Else
                      frm2.Close()
                  End If
              Loop Until frm2.resetOnClose = False
          End Sub
      End Class
      

      对于本例,frm2 在 Form1 显示后立即打开,但您可以将相关代码放在任何需要的地方

      Form1.Shown 代码中,您将看到一个循环。只要resetOnCloseTrue,循环就会继续循环。当frm1 以模态方式显示时,此Form1 代码中的执行将等到frm2 被隐藏或关闭。接下来,Form1 代码检查resetOnClose 属性是真还是假。如果为假,frm2 将关闭并且循环终止。如果该属性为真,frm2 将被关闭并在其默认状态下重新分配 Form2 的新实例。

      瞧!

      【讨论】:

        猜你喜欢
        • 2012-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 2023-03-14
        • 1970-01-01
        • 2013-03-27
        相关资源
        最近更新 更多