문제

저는 C#을 처음 접하고 숫자 입력 및 범위 유효성 검사가 가능한 간단한 컨트롤을 찾고 있는 MFC 프로그래머입니다.

도움이 되었습니까?

해결책

"NumericUpDown" 컨트롤을 살펴보세요.범위 유효성 검사 기능이 있고 입력은 항상 숫자이며 멋진 증가/감소 버튼이 있습니다.

다른 팁

숫자, 정수 또는 실수만 허용하는 컨트롤을 구현해야 했습니다.나는 (읽기:파생) TextBox 컨트롤, 유효성 검사를 위해 입력 컨트롤과 정규식을 사용합니다.범위 유효성 검사를 추가하는 것은 매우 쉽습니다.

정규식을 작성하는 코드입니다._numericSeparation은 문자가 십진 쉼표 값으로 허용되는 문자열입니다 (예 : a '.'또는 a ',': :$10.50 10,50€

private string ComputeRegexPattern()
{
   StringBuilder builder = new StringBuilder();
   if (this._forcePositives)
   {
       builder.Append("([+]|[-])?");
   }
   builder.Append(@"[\d]*((");
   if (!this._useIntegers)
   {
       for (int i = 0; i < this._numericSeparator.Length; i++)
       {
           builder.Append("[").Append(this._numericSeparator[i]).Append("]");
           if ((this._numericSeparator.Length > 0) && (i != (this._numericSeparator.Length - 1)))
           {
               builder.Append("|");
           }
       }
   }
   builder.Append(@")[\d]*)?");
   return builder.ToString();
}

정규식은 모든 숫자와 일치합니다(예:숫자 문자가 포함된 모든 문자열) 숫자 구분 문자는 하나만 있고 문자열 시작 부분에는 '+' 또는 '-' 선택적 문자가 있습니다.정규식을 생성하면(컨트롤을 인스턴스화할 때) OnValidating 메서드를 재정의하여 값이 올바른지 확인합니다.CheckValidNumber()는 소개된 텍스트에 Regex를 적용합니다.정규식 일치가 실패하면 지정된 오류(ValidationError 공용 속성으로 설정)로 오류 공급자를 활성화하고 ValidationError 이벤트를 발생시킵니다.여기에서 숫자가 필요한 범위에 있는지 확인하기 위해 확인할 수 있습니다.

private bool CheckValidNumber()
{
   if (Regex.Match(this.Text, this.RegexPattern).Value != this.Text)
   {
       this._errorProvider.SetError(this, this.ValidationError);
       return false;
   }
   this._errorProvider.Clear();
   return true;
}

protected override void OnValidating(CancelEventArgs e)
{
   bool flag = this.CheckValidNumber();
   if (!flag)
   {
      e.Cancel = true;
      this.Text = "0";
   }
   base.OnValidating(e);
   if (!flag)
   {
      this.ValidationFail(this, EventArgs.Empty);
   }
}

내가 말했듯이, 또한 사용자가 OnKeyPress 메소드를 재정의하는 숫자 문자 이외의 텍스트 상자에 데이터를 입력하는 것을 방지합니다.

protected override void OnKeyPress(KeyPressEventArgs e)
{
    if ((!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar)) && (!this._numberSymbols.Contains(e.KeyChar.ToString()) && !this._numericSeparator.Contains(e.KeyChar.ToString())))
    {
        e.Handled = true;
    }
    if (this._numberSymbols.Contains(e.KeyChar.ToString()) && !this._forcePositives)
    {
        e.Handled = true;
    }
    if (this._numericSeparator.Contains(e.KeyChar.ToString()) && this._useIntegers)
    {
        e.Handled = true;
    }
    base.OnKeyPress(e);
}

우아한 터치:사용자가 키를 놓을 때마다 숫자가 유효한지 확인하여 사용자가 입력할 때 피드백을 받을 수 있도록 합니다.(그러나 ValidationFail 이벤트에는 주의해야 한다는 점을 기억하십시오. ;))

protected override void OnKeyUp(KeyEventArgs e)
{
    this.CheckValidNumber();
    base.OnKeyUp(e);
}

일반 텍스트 상자와 유효성 검사기 컨트롤을 사용하여 입력을 제어할 수 있습니다.

오류 공급자 컨트롤을 사용하여 텍스트 상자의 유효성을 검사해 보세요.int.TryParse() 또는 double.TryParse()를 사용하여 숫자인지 확인한 다음 범위를 확인할 수 있습니다.

필수FieldValidator와 CompareValidator의 조합을 사용할 수 있습니다(연산자의 경우 DataTypeCheck로 설정하고 유형은 정수로 설정).

원하는 경우 일반 텍스트 상자를 사용하여 얻을 수 있습니다. 그렇지 않으면 위의 권장 사항이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top