2009-08-06 5 views
1

여러 양식에 특정 동작을 추가하고 싶습니다. 이 경우 입력 유효성 검사가 실패 할 때 트리거되는 풍선 메시지입니다. 가장 쉬운 해결책은 정적 클래스로 만들고 각 필드의 onvalidate 이벤트의 실패 조건에서 호출하는 것입니다.여러 양식에 시각적 동작 추가

public static class BalloonMessage 
{ 
    private static ToolTip _toolTip = new ToolTip() 
              { 
               Active = false, 
               IsBalloon = true 
              }; 

    public static void Show(string message,Control control) 
    { 
     if (!_toolTip.Active) 
     { 
      //4 year old bug in tooltip doesn't place balloon "tail" correctly 
      // when first attached to a control. Microsoft still hasn't fixed it. 
      _toolTip.Show(message, control); 
      _toolTip.Active = true; 
      _toolTip.Show(message, control); 
     } 
    } 

    public static void Clear() 
    { 
     _toolTip.Active = false; 
    } 
} 

private void textBox1_Validating(object sender, CancelEventArgs e) 
{ 
    if (textBox1.Text.Contains(" ")) 
    { 
     BalloonMessage.Show(String.Format("Field cannot contain spaces"), textBox1); 
     e.Cancel = true; 
    } 
    else 
    { 
     BalloonMessage.Clear(); 
    } 
} 

이 날이 가장 좋은 방법 경우 내가 궁금하네요 명시 적으로 의존하지만 없이 어떤 형태로 BalloonMessage를 사용할 수 있습니다. 샘플 코드에는 표시되지 않지만 프로덕션 코드는 수많은 상호 연관된 MVP 트라이어드를 사용합니다. 유효성 검사는 발표자에서 수행되며 폼의 컨트롤에 직접 액세스 할 수 없습니다. 따라서 balloonmessage에 표시하기 위해 검증 결과와 오류 메시지를보기로 다시 전달해야합니다.

덧붙여서 궁금한 점이 있다면 EM_SHOWBALLOONTIP을 포장하는 대신 툴팁을 사용하고 있습니다. Windows 2000에서이 functionallity를 원했기 때문에 EM_SHOWBALLOONTIP이 XP에 추가되었습니다. 툴팁은 IE 5.5 이상이 설치되어있는 한 2000 년 풍선으로 표시 될 수 있습니다 (모든 Win2K 클라이언트가 IE 6을 사용하고 있음). 내가 호버에 기본값 을 억제 할 때까지 비활성 상태로 유지하는 것입니다..

답변

0

나는 이것이 아마도 갈 길이라고 말하고 싶습니다. 그것은 .NET에 내장 된 MessageBox 기능을 따릅니다.

0

BalloonTipForm 다른 양식에서 필요한 요소를 상속 받도록 만들 수 있습니다. 그 안에있는 특정 컨트롤에 대한 유효성 검사 이벤트를 처리 할 수는 없지만이를 표시하는 일반적인 방법은 분명 있습니다.

그리고 풍선 검증/숨기기 메소드를 명시 적으로 호출 할 필요가 없도록 실제 유효성 검사를 관찰 할 수있는 방법이 있습니다. (발표자의 실제 유효성 검사가 여러 통화를 필요로하는지 또는 몇 가지 만 가능할지 여부는 알지 못합니다.)

자신 만의 솔루션이 그리 나쁘지 않게 보입니다. 2를 쉽게 혼합 할 수 있습니다.

관련 문제