【问题标题】:Underlines of MaskedTextBox disappearMaskedTextBox 的下划线消失
【发布时间】:2021-09-22 13:40:59
【问题描述】:

我在 Windows 窗体中遇到问题。我创建了一个表单,我可以在其中输入名字和姓氏,然后单击搜索按钮以显示另一个表单,其中包含以下代码:

Private Sub btnSearchUser_Click(sender As Object, e As EventArgs) Handles btnSearchUser.Click

    If Me._clsfrmChild Is Nothing Then
        Me._clsfrmChild = New clsFrmChild
    End If

    If Me._clsfrmChild.ShowDialog = False Then
        Me._clsfrmChild.ShowDialog(Me)
    End If

在第二种形式中,我有一个 MaskedTextbox:

Empty MaskedTextBox

无论我做什么,如果我用 Visible = False 关闭第二个表单并重新打开它,MaskedTextBox 看起来像这样: MaskedTextBox without underlines

我这样关闭第二个表单:

Private Sub btnAbort_Click(sender As Object, e As EventArgs) Handles btnAbort.Click
    Me.Visible = False
End Sub

你们中有人知道为什么会出现这个问题吗?

【问题讨论】:

  • 这很有趣If Me._clsfrmChild.ShowDialog = False Then
  • @T.S.什么意思?
  • 我的答案就是答案
  • @T.S.谢谢你。我会试试这个!

标签: vb.net winforms maskedtextbox


【解决方案1】:

这确实不是您应该使用对话框的方式。正确的做法是这样的

dim result as DialogResult
using f as Form = New MyForm()

    result = f.ShowDialog()
    ' here you can work with form's public properties etc
end using

' optionally here you can continue massaging the result
if result = DialogResult.Ok then
   ' do for ok result
else
   ' do for other result. You can have severul results - add elseif
end if

【讨论】:

    【解决方案2】:

    这里是一般如何与结果进行对话的方法。这将类似于MessageBox.Show() 的工作方式。

    Public Class clsFrmChild
    
        Private Sub New()
            InitializeComponent()
        End Sub
    
        Public Shared Shadows Function Show() As DialogResult
            Dim result As DialogResult
            Using f As New clsFrmChild()
                result = f.ShowDialog()
            End Using
            Return result
        End Function
    
        Private Sub OkButton_Click(sender As Object, e As EventArgs) Handles OkButton.Click
            DialogResult = DialogResult.OK
            Close()
        End Sub
    
        Private Sub CancelButton_Click(sender As Object, e As EventArgs) Handles CancelButton.Click
            DialogResult = DialogResult.Cancel
            Close()
        End Sub
    
    End Class
    

    注意构造函数是私有的,所以没有更多的Me._clsfrmChild = New clsFrmChild。当像MessageBox 那样调用时,您会看到模态对话框的显示要简单得多

    Private Sub btnSearchUser_Click(sender As Object, e As EventArgs) Handles btnSearchUser.Click
        Dim result = clsFrmChild.Show() ' static method call instead of instance method
        Select Case result
            Case DialogResult.OK
                MessageBox.Show("Ok")
            Case DialogResult.Cancel
                MessageBox.Show("Cancel")
        End Select
    End Sub
    

    如果您对返回标准 DialogResult 不感兴趣,您可以将返回类型更改为您喜欢的任何类型,例如自定义类,并提供更多信息(例如,除了 DialogResult,您还想返回一个字符串),即

    Public Class clsFrmChildResult
        Public Property Text As String
        Public Property DialogResult As DialogResult
    End Class
    
    ...
    
    Public Shared Shadows Function Show() As clsFrmChildResult
        Dim result As clsFrmChildResult
        Using f As New clsFrmChild()
            Dim dr = f.ShowDialog()
            result = New clsFrmChildResult With {.Text = TextBox1.Text, .DialogResult = dr}
        End Using
        Return result
    End Function
    
    ...
    
    Private Sub btnSearchUser_Click(sender As Object, e As EventArgs) Handles btnSearchUser.Click
        Dim result = clsFrmChild.Show()
        Select Case result.DialogResult
            Case DialogResult.OK
                MessageBox.Show("Ok")
                Dim myString = result.Text
            Case DialogResult.Cancel
                MessageBox.Show("Cancel")
        End Select
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 2016-04-29
      • 1970-01-01
      • 2016-12-03
      • 2021-11-28
      相关资源
      最近更新 更多