【问题标题】:How To Make public sub form ShowDialog如何使公共子窗体 ShowDialog
【发布时间】:2019-09-15 00:26:25
【问题描述】:

如何公开子窗体 ShowDialog

我有模块,我想放一个代码,我可以在所有项目中使用它来打开表单。

我已尝试将此代码放入 Module Put Not Working

Public Sub OpenForm(ByVal Frm As Form)
    Frm = New Frm()
    frm.ShowDialog()
End Sub

错误是“未定义类型'Frm'”

诚挚的问候并感谢您的帮助 塞勒姆

【问题讨论】:

  • 试试这个:Frm = New Form.
  • 它将打开新表单我想打开特定表单我想打开 CustumerFrm 或其他表单
  • 然后删除Frm = New Frm()这一行。
  • 你为什么要传入一个表单,然后立即将传入的 Frm 变量重新分配给一个新表单?
  • 如果你传递一个 Form 实例,你不需要创建它的新实例来显示它。直接显示Frm.ShowDialog()。如果您传递的是 Type 而不是该类型的实例,则情况不同。但是,VB.Net 默认实例...

标签: vb.net forms module public showdialog


【解决方案1】:

在模块中

Public Sub ShowADialog()
    Dim dialog As New SaveFileDialog
    dialog.ShowDialog()
End Sub

在表格中

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    ShowADialog()
End Sub

【讨论】:

    【解决方案2】:

    可以写你的sub来显示一个对话框

    Public Module MyModule
    
        Public Sub OpenForm(ByVal Frm As Form)
            frm.ShowDialog()
        End Sub
    
    End Module
    

    会这样调用

    Dim myForm = New Form()
    MyModule.OpenForm(myForm)
    

    但是这样做会容易得多

    Dim myForm = New Form()
    myForm.ShowDialog()
    

    编辑

    这是一个通用版本,它构造和处理表单,因为它是模态使用的

    Public Module MyModule
    
        Public Sub OpenForm(Of T As {Form, New})()
            Using frm As New T()
                frm.ShowDialog()
            End Using
        End Sub
    
    End Module
    

    会这样调用

    MyModule.OpenForm(Of Form)()
    ' or with your custom form class
    MyModule.OpenForm(Of MyCustomFormClass)()
    

    【讨论】:

    • 使用 .ShowDialog 时,建议在 Using 块中创建表单的实例,以便在关闭表单时正确处理,除非有理由不想让它保持不动,我不能随便想想。
    • @Mr.Tripodi 这是一个很好的观点,但我不确定它是否属于问题的范围。特别是因为在 OP 的原始问题中构造表单的位置不明确。但我会添加另一种在使用后处理模态表单的方法。
    • 我实际上无法推断问题的范围,不过编辑很好,看起来不错
    • 谢谢大家,但仍然是一个小问题,即添加此代码时 OpenForm(Of Frm_CountiresAndCitiesDetails)() Frm_CountiresAndCitiesDetails.TextBox1.Text = Val(p.Get_Last_Counrty) Frm_CountiresAndCitiesDetails 中的 TextBox1 没有从数据库中获取任何信息Val(p.Get_Last_Counter) 这是在数据库中获取最大 id 谢谢
    • 那是因为你打开它是模态的,这是一个阻塞调用,这意味着你的代码在方法内部的ShowDialog() 上停止,直到表单关闭,并且在方法之外完成的任何事情都在之后完成它被处理掉了。看来您毕竟不能使用我在编辑中提供的方法。此外,您似乎不建议访问default form instance of vb.net
    猜你喜欢
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 2011-10-07
    相关资源
    最近更新 更多