2

C#でNumericUpDownコントロールの特定の構成を構成しようとすると問題が発生します。

基本的には増分間隔を設定できることを確認しましたが、クリックする矢印(上または下)に応じて増分間隔を管理したいと思います。コントロールのイベントを確認しましたが、各矢印のイベントが見つかりません。

基本的には、異なる値で増分が異なる制御を実現したいと思います。

0.00から5.00の増分で0.01、5.00から20.00の増分で0.04など。

これは可能ですか?

注:valuechangedイベントがトリガーされた場合、最後の値のコントロールの履歴値も役立ちます。これは存在しますか?

コメントや提案を事前に感謝します!!!

編集:私はそれを正しく説明しなかったので、私はこれを編集します、私は推測します。これが理由です。上または下のどちらの矢印が押されたかを知りたいからです。

これは私が持っているもので、多かれ少なかれ。矢印の代わりにキーボードを使用して値フィールドに直接設定された誤った値を回避するために、すべての範囲とモジュロ除算を使用したいくつかのチェックを追加しました。問題は、上向きの矢印を使用して制限を通過する場合、すべてがOKであるということです。ただし、下向きの矢印を使用すると、1つのステップを逃します。

    if (cuotaUno.Value >= 30M && cuotaUno.Value < 50M)
    {
        cuotaUno.Increment = 2M;
        if (!((cuotaUno.Value % 2M) == 0))
        {
            cuotaUno.Value = cuotaUno.Value - (cuotaUno.Value % 2M);
        }

    }

    if (cuotaUno.Value >= 50M && cuotaUno.Value < 100M)
    {
        cuotaUno.Increment = 5M;
        if (!((cuotaUno.Value % 5M) == 0))
        {
            cuotaUno.Value = cuotaUno.Value - (cuotaUno.Value % 5M);
        }

    }

この場合、値が100のときに下にクリックすると、95ではなく90に直接移動します。ただし、90にいて上にクリックすると、95と100に正しく移動します。

4

3 に答える 3

2

NumericUpDown.ValueChangedイベントとNumericUpDown.Incrementプロパティを使用して、奇跡を起こすことができます。

ちなみに、増分または加速に非常にこだわるかどうかはわかりませんので、役立つ場合はNumericUpDown.Accelerationsプロパティを確認してください。

アップデート

readonly decimal PART1 = 30M;
readonly decimal PART2 = 50M;
readonly decimal PART3 = 100M;
readonly decimal INC1 = 1M;
readonly decimal INC2 = 2M;
readonly decimal INC5 = 5M;
readonly decimal INC10 = 10M;

private void cuotaUno_ValueChanged(object sender, EventArgs e)
{
    decimal val = cuotaUno.Value;
    decimal inc = cuotaUno.Increment;
    decimal rem;

    if (val < PART1 && inc != INC1)
    {
        if (inc == INC2 && val == (PART1 -INC2))
            val += (inc - INC1);
        inc = INC1;
    }
    else if (val >= PART1 && val < PART2 && inc != INC2)
    {
        if (inc == INC5 && val == (PART2-INC5))
            val += (inc - INC2);
        inc = INC2;
        rem = val % INC2;
        if (rem != 0)
            val -= rem;
    }
    else if (val >= PART2 && val < PART3 && inc != INC5)
    {
        if (inc == INC10 && val == (PART3-INC10))
            val += (inc - INC5);
        inc = INC5;
        rem = val % INC5;
        if (rem != 0)
            val -= rem;
    }
    else if (val >= PART3 && inc != INC10)
    {
        inc = INC10;
        rem = val % INC10;
        if (rem != 0)
            val -= rem;
    }

    cuotaUno.Increment = inc;
    cuotaUno.Value = val;            
}
于 2010-06-17T11:48:51.713 に答える
1

これはうまくいきませんか?

private void NumericUpDown1_ValueChanged(Object sender, EventArgs e) 
{
    if(NumericUpDown1.Value >= 0 && NumericUpDown1.Value < 5)
    {
        NumericUpDown1.Increment = 0.01;
    }
    if(NumericUpDown1.Value >= 5 && NumericUpDown1.Value < 20)
    {
        NumericUpDown1.Increment = 0.04;
    }
}
于 2010-06-17T12:17:02.627 に答える
0

NumericUpDownコントロールを初期化する独自のコントロールを作成します。

OnkeyDownメソッドをオーバーライドし、現在の値を確認して増分を変更してから、基本クラスの実装を呼び出します。

それが私が試みることです。

于 2010-06-17T11:27:21.907 に答える