2007-03-12 Jonathan Pobst <monkey@jpobst.com>
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / NumericUpDown.cs
index f29c44b5d9a240a96244986dc446f1593c70fe8d..c2b5bb3d0fc26e7e0c39ed39abda2c31f5251e30 100644 (file)
@@ -26,8 +26,6 @@
 //     Peter Bartok            <pbartok@novell.com>
 //
 
-// COMPLETE
-
 using System;
 using System.Collections;
 using System.ComponentModel;
@@ -40,6 +38,11 @@ using System.Windows.Forms;
 namespace System.Windows.Forms {
        [DefaultEvent("ValueChanged")]
        [DefaultProperty("Value")]
+#if NET_2_0
+       [DefaultBindingProperty ("Value")]
+       [ClassInterface (ClassInterfaceType.AutoDispatch)]
+       [ComVisible (true)]
+#endif
        public class NumericUpDown : UpDownBase, ISupportInitialize {
                #region Local Variables
                private int     suppress_validation;
@@ -61,6 +64,8 @@ namespace System.Windows.Forms {
                        maximum = 100M;
                        minimum = 0.0M;
                        thousands_separator = false;
+
+                       Text = "0";
                }
                #endregion      // Public Constructors
 
@@ -245,6 +250,8 @@ namespace System.Windows.Forms {
                [Bindable(true)]
                public decimal Value {
                        get {
+                               if (UserEdit)
+                                       ParseEditText();
                                return dvalue;
                        }
 
@@ -326,9 +333,9 @@ namespace System.Windows.Forms {
                }
 
                protected virtual void OnValueChanged(EventArgs e) {
-                       if (ValueChanged != null) {
-                               ValueChanged(this, e);
-                       }
+                       EventHandler eh = (EventHandler)(Events [ValueChangedEvent]);
+                       if (eh != null)
+                               eh (this, e);
                }
 
                protected void ParseEditText() {
@@ -340,7 +347,7 @@ namespace System.Windows.Forms {
                                if (!hexadecimal) {
                                        dvalue = decimal.Parse(user_edit_text, CultureInfo.CurrentCulture);
                                } else {
-#if NET_1_1
+#if !NET_2_0
                                        dvalue = Convert.ToDecimal (Convert.ToInt32 (user_edit_text, 16));
 #else
                                        dvalue = Convert.ToDecimal (Convert.ToInt32 (user_edit_text, 10));
@@ -451,20 +458,28 @@ namespace System.Windows.Forms {
                }
 
 #if NET_2_0
-        protected override void OnLostFocus(EventArgs e) {
-            base.OnLostFocus(e);
-            if (this.UserEdit)
-                this.UpdateEditText();
-        }
+               protected override void OnLostFocus(EventArgs e) {
+                       base.OnLostFocus(e);
+                       if (this.UserEdit)
+                               this.UpdateEditText();
+               }
 #endif
                #endregion      // Protected Instance Methods
 
                #region Events
-               public event EventHandler ValueChanged;
+               static object ValueChangedEvent = new object ();
+
+               public event EventHandler ValueChanged {
+                       add { Events.AddHandler (ValueChangedEvent, value); }
+                       remove { Events.RemoveHandler (ValueChangedEvent, value); }
+               }
 
                [Browsable(false)]
                [EditorBrowsable(EditorBrowsableState.Never)]
-               public event EventHandler TextChanged;
+               public new event EventHandler TextChanged {
+                       add { base.TextChanged += value; }
+                       remove { base.TextChanged -= value; }
+               }
                #endregion      // Events
        }
 }