try: private decimal currentValue;
 
private void Form_Load(object sender, System.EventArgs e)
{
 this.currentValue = this.numericUpDown1.Value;
} private void numericUpDown1_ValueChanged(object sender, System.EventArgs e)
 {
 if(this.numericUpDown1.ReadOnly)
 {
  if(this.numericUpDown1.Value != this.currentValue)
     this.numericUpDown1.Value = this.currentValue;
 }
 else
  this.currentValue = this.numericUpDown1.Value;
 }