3

NumericUpDownMaximum = 99Minimum = -99初期値 =があるとし23ます。ユーザーがこのコントロールと入力にフォーカスを設定すると1(現在はそうです123)、値が に変更され99ます。23代わりに値を最大許容値に変更し続けるにはどうすればよいですか?

KeyDown と KeyPress をキャッチしようとしましたが、このイベント中に値は変更されませんでした。また、この質問で説明されている回避策を実装しようとしましたが、成功しませんでした。検証イベントは、コントロールを離れるときにのみ発生します。ユーザー入力が最大値より大きいか最小値より小さい場合は、単純に無視する必要があります。

アップデート。私はWinFormsを使用しています。

4

4 に答える 4

4

数値が 99 より大きいか -99 より小さいかどうかを確認するには、およびのような外部グローバル プロパティprivate int iTextBox { get; set; }を使用します。OnTextChange event

OnTextChange:

{
       int newValue = int.Parse(textBox1.Text);
       if (newValue > Maximum)
              textBox1.Text = iTextBox;
       if (newValue < Minimum)
              textBox1.Text = iTextBox;

       iTextBox = int.Parse(textBox1.Text);
}
于 2012-08-27T13:22:17.580 に答える
1

OK、この質問のヘルプで解決策を見つけました。いろいろ組み合わせてみて、あまり複雑でない組み合わせを見つけました。KeyDown イベントで古い値を保存し、イベントで確認しtextBox.TextChangedます。その時点で値はまだ変更されていません。現在、numericUpDown は、最小から最大の範囲にない入力を視覚的に破棄します。ユーザーフレンドリーではないと思いますが、やるべきことがいくつかあります。

public partial class Form1
{
   private decimal _oldValue;
   private TextBox textBox;

   public Form1()
   {
      InitializeComponent();

      textBox = (TextBox)numericUpDown.Controls[1];
      textBox.TextChanged += TextBoxOnTextChanged;
   }

   private void TextBoxOnTextChanged(object sender, EventArgs eventArgs)
    {
        decimal newValue = Convert.ToDecimal(((TextBox) sender).Text);
        if (newValue > numericUpDown.Maximum || newValue < numericUpDown.Minimum)
            ((TextBox) sender).Text = _oldValue.ToString();
    }

   private void numericUpDown_KeyDown(object sender, KeyEventArgs e)
   {
      _oldValue = ((NumericUpDownCustom) sender).Value;
   }
}
于 2012-08-28T10:12:37.333 に答える
0

NumericUpDown コントロールの ValueChanged イベントでこれを行うことはできませんか? 元の値を保存するだけで、入力している値が無効な場合は、保存された値を復元できます。

于 2012-08-27T16:11:31.550 に答える
0

WPF を使用している場合は、値を再割り当てするコンバーターを記述します。

public class BoolToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType,  object parameter, CultureInfo culture)
    {
        int i = int.Parse(value as string);
        // logic here
    }

    public object ConvertBack(object value, Type targetType,  object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}
于 2012-08-27T13:23:47.553 に答える