2014-10-25 5 views
0

내 문제 :

ErrorProvider에서 생성 된 빨간색 아이콘이 6 번 깜박입니다. 나는 그것을 두 번 깜박이도록 설정할 수 있기를 원합니다.ErrorProvider 깜박임 량은 어떻게 설정합니까?

눈 깜박임 속성은 BlinkRateBlinkStyle 뿐이며 깜박임 양에 영향을주지 않습니다.

재현하려면 :

  1. 은 Visual Studio에서 디자인 모드에서, 새로운 폼에 텍스트 상자와 ErrorProvider을 끕니다. 그대로
  2. 방법 다음 :

코드 : 이것은

Public Class Form1 
    Private Sub Textbox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged 
     If Not IsNumeric(TextBox1.Text) Then 
      ErrorProvider1.SetError(TextBox1, "Numeric input only!") 
     Else 
      ErrorProvider1.SetError(TextBox1, "") 
     End If 
    End Sub 
End Class 
+0

깜박임 량을 설정할 속성이 없습니다. 이를 달성하기 위해 자체 errorprovider 컨트롤을 만들 수 있습니다. – Sybren

+0

또는 깜박임을 끄고 안정된 디스플레이를 사용하십시오. – Plutonix

답변

5

Winforms source에 하드 코딩.

정말로 원한다면 혼란 스러울 수 있습니다. 리플렉션을 사용하여 비공개 멤버에 액세스 할 수 있습니다. 일반적으로 다소 위험하지만 Winforms 코드는 오랫동안 안정되어 왔으며 더 이상 변하지 않을 것입니다. 당신은 아주 쉽게 VB 그것을 번역 할 수는 C# 버전을 게시합니다 :

using System.Reflection; 
... 
    public static void ReportError(ErrorProvider provider, Control control, string text) { 
     if (provider.GetError(control) == text) return; 
     provider.SetError(control, text); 
     // Dig out the "items" hash table to get access to the ControlItem for the control 
     var fi = typeof(ErrorProvider).GetField("items", BindingFlags.NonPublic | BindingFlags.Instance); 
     var ht = (System.Collections.Hashtable)(fi.GetValue(provider)); 
     var ci = ht[control]; 
     // Patch the ControlItem.blinkPhase field to lower it to 2 blinks 
     var fi2 = ci.GetType().GetField("blinkPhase", BindingFlags.NonPublic | BindingFlags.Instance); 
     if ((int)fi2.GetValue(ci) > 4) fi2.SetValue(ci, 4); 
    } 

작품 좋은, 낮은 위험을.