2016-11-05 4 views
-3

を制御ロックそれを変更したいのですが、コントロール自体の数値を変更することなく、新しい値にアクセスする必要があります。私はいくつかの条件の下でロックを解除できるようにするだけでなく必要があるので、それはそのようになりC#のWindowsフォームは、私はWinFormsのアプリケーションをプログラミングだ、と私は、問題が発生した

private void numericUpDown1_ValueChanged(object sender, EventArgs e) 
    { 
     if (!canChange) 
     { 
      int newValue = get_expected_new_value(); 
      doSomeStuff(newValue); 
      //some_code_to_cancel_the_value_change; 
     } 
     else 
     { 
      //allow the change 
      doSomeOtherStuff(); 
     } 
    } 

私はどうすればよいの事を薄く?

+0

'.Minimum'と' .Maximum'を同じ値に設定することができます。これは、ボタンやテキストボックスを使用して値を変更しないようにする必要があります。 – HABO

+0

これを行うための穏やかな方法はありませんか?私は新しい期待値を取得する必要があります、最小値と最大値は、私にこれを助けません... – David

答えて

0

numericUpDown1Tagプロパティには、最後の値を格納できます。 これは特に巧妙な解決策ではありませんが。

クレジット:あなたはTagプロパティに最後の既知の良好な値を格納

 private void numericUpDown1_ValueChanged(object sender, EventArgs e) 
     { 
      var o = (NumericUpDown) sender; 
      int thisValue = (int) o.Value; 
      int lastValue = (o.Tag == null) ? 0 : (int)o.Tag; 
      o.Tag = thisValue; 

      if (checkBox1.Checked) //some custom logic probably 
      { 
       //remove this event handler so it's not fired when you change the value in the code. 
       o.ValueChanged -= numericUpDown1_ValueChanged; 
       o.Value = lastValue; 
       o.Tag = lastValue; 
       //now add it back 
       o.ValueChanged += numericUpDown1_ValueChanged; 
      } 
      //otherwise allow as normal 
     } 

Basicaly:C# NumericUpDown.OnValueChanged, how it was changed?

あなたのケースでは、このような何かを見ることができます。 次に、条件をチェックし、値を最後の良好な値に戻します。

+0

ありがとう!それは本当に便利でした – David

関連する問題