منع التحقق من صحة / التحقق من صحة الحدث من كرة صاروخية نص مخصص - vb.net

StackOverflow https://stackoverflow.com/questions/1639774

  •  08-07-2019
  •  | 
  •  

سؤال

ولدي عنصر مربع نص مخصص (يرث من system.windows.forms.textbox) بأنني خلقت في vb.net (2005) الذي يعالج إدخال بيانات رقمية. أنه يعمل بشكل جيد.

وأود أن قمع التأكد من صحتها والتحقق من صحة الأحداث من اطلاق إذا كان الرقم لم يتغير. إذا كان المستخدم الجدولة من خلال شكل وعلامات التبويب من مربع النص، والتحقق من صحة / وتطلق الأحداث التحقق من صحتها.

وكنت أفكر أن مربع النص يمكن مؤقتا قيمة وذلك لمقارنة ما تم سرده في خاصية النص. إذا كانت مختلفة، ثم أود أن ترغب في التحقق من صحة / التحقق من صحة الأحداث لاطلاق النار. إذا كانت هي نفسها، وأطلق شيء.

وأنا لا يمكن أن يبدو لمعرفة كيفية قمع هذا الحدث. لقد حاولت تجاوز الحدث OnValidating. لم يفلح ذلك.

وأي أفكار؟

تحديث:

وهنا هو فئة مربع نص مخصص. والفكرة هي أن أريد أن تخزين قيمة مربع النص على الحدث التحقق من صحة. مرة واحدة يتم مؤقتا قيمة، في المرة القادمة علامات التبويب المستخدم من خلال مربع، فإن الحدث التحقق تحقق لمعرفة ما إذا كان _Cache يختلف عن .Text. إذا كان الأمر كذلك وهذا هو عندما أود أن رفع الحدث التحقق من صحة إلى النموذج الأصل (وكذلك حالة التحقق من صحة). إذا كان _cache هو نفسه، ثم أنا لا أريد أن رفع الحدث إلى النموذج. أساسا مربع النص ستعمل نفس مربع نص عادي إلا أن التأكد من صحتها والتحقق من صحة طريقة تثار فقط إلى النموذج عند تغيير النص.

 Public Class CustomTextBox

#Region "Class Level Variables"
    Private _FirstClickCompleted As Boolean = False 'used to indicate that all of the text should be highlighted when the user box is clicked - only when the control has had focus shifted to it
    Private _CachedValue As String = String.Empty
#End Region

#Region "Overridden methods"
    Protected Overrides Sub OnClick(ByVal e As System.EventArgs)
        'check to see if the control has recently gained focus, if it has then allow the first click to highlight all of the text
        If Not _FirstClickCompleted Then
            Me.SelectAll() 'select all the text when the user clicks a mouse on it...
            _FirstClickCompleted = True
        End If

        MyBase.OnClick(e)
    End Sub

    Protected Overrides Sub OnLostFocus(ByVal e As System.EventArgs)
        _FirstClickCompleted = False 'reset the first click flag so that if the user clicks the control again the text will be highlighted

        MyBase.OnLostFocus(e)
    End Sub

    Protected Overrides Sub OnValidating(ByVal e As System.ComponentModel.CancelEventArgs)

        If String.Compare(_CachedValue, Me.Text) <> 0 Then
            MyBase.OnValidating(e)
        End If
    End Sub

    Protected Overrides Sub OnValidated(ByVal e As System.EventArgs)
        _CachedValue = Me.Text
        MyBase.OnValidated(e)
    End Sub
#End Region

End Class

وتحديث 2:

وبفضل xpda، والحل هو بسيط (بسيط لدرجة أنني لم أفهم :)). استبدال OnValidating وOnValidated مع (أيضا منطقية لتسجيل حالة مطلوب):

Protected Overrides Sub OnValidating(ByVal e As System.ComponentModel.CancelEventArgs)
    If String.Compare(_CachedValue, Me.Text) <> 0 Then
        _ValidatingEventRaised = True
        MyBase.OnValidating(e)
    End If
End Sub

Protected Overrides Sub OnValidated(ByVal e As System.EventArgs)
    If Not _ValidatingEventRaised Then Return

    _CachedValue = Me.Text
    _ValidatingEventRaised = False
    MyBase.OnValidated(e)
End Sub
هل كانت مفيدة؟

المحلول

ويمكنك تعيين إشارة في الحدث TextChanged واستخدام هذا العلم لمعرفة ما إذا كان للخروج في بداية معالجات التحقق من الصحة.

نصائح أخرى

وحاول لمعالجة الحدث في التحكم الخاصة بك وإلغاء ذلك على النحو التالي.

Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
    e.Cancel = True
End Sub
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top