2016-11-05 3 views
-3

steuert ich eine WinForms-Anwendung bin Programmierung, und ich habe ein Problem festgestellt:C# sperrt ein Fenster bildet

Ich habe zum Beispiel eine numerische UpDown-Steuerung, und wenn Sie die Taste nach oben/unten-Taste, I don Ich möchte, dass es sich ändert, aber ich möchte auf den neuen Wert zugreifen, ohne die Nummer auf dem Steuerelement selbst zu ändern.

ich auch brauchen, um der Lage sein, unter einer Bedingung zu entsperren, so würde es so aussehen:

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(); 
     } 
    } 

Wie kann ich tun, was lichtet?

+0

Sie könnten '.Minimum' und' .Maximum' auf den gleichen Wert einstellen. Dies sollte verhindern, dass Sie den Wert mit den Schaltflächen oder dem Textfeld ändern. – HABO

+0

gibt es keine sanftere Art, dies zu tun? herumspielen mit dem Minimum und Maximum sieht irgendwie schrecklich aus und kann zu Fehlern führen, außerdem muss ich den neuen Erwartungswert bekommen, minimale und maximale Lösung wird mir dabei nicht helfen ... – David

Antwort

0

Sie können die Tag-Eigenschaft des numericUpDown1 verwenden, um den letzten Wert zu speichern. Obwohl es keine besonders elegante Lösung ist.

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

In Ihrem Fall ist es so etwas wie folgt aussehen:

 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 speichern Sie die letzte bekannte gute Wert in der Tag Eigenschaft. Dann überprüfen Sie Ihre Kondition und setzen den Wert auf den letzten guten Wert zurück.

+0

danke! das war wirklich nützlich – David