예제 #1
0
 public PropertyController(
     object xiTarget,
     string xiPropertyName,
     NamedValueHolder[] xiAllowedValues)
     : this(xiTarget, xiPropertyName, null, xiAllowedValues)
 {
 }
예제 #2
0
        public PropertyController(
            object xiTarget,
            string xiPropertyName,
            string xiPropertyUpdateEventName,
            NamedValueHolder[] xiAllowedValues)
        {
            mTarget = xiTarget;
              mProperty = mTarget.GetType().GetProperty(xiPropertyName);
              if (mProperty == null) throw new ArgumentException(string.Format("Property \"{0}\" not found on type {1}", xiPropertyName, xiTarget.GetType()));
              Type lPropType = mProperty.PropertyType;
              mAllowedValues = xiAllowedValues;

              if (!lPropType.IsEnum
            && lPropType != typeof(bool)
            && lPropType != typeof(System.Drawing.Color)
            && xiAllowedValues == null) throw new ArgumentException("If property is not enumerated or boolean, then you must provide an array of allowed values");

              // have a guess at an update event name. Don't throw an exception
              // if we guess wrong
              bool lEventNameInferred = false;
              if (xiPropertyUpdateEventName == null)
              {
            xiPropertyUpdateEventName = string.Format("On{0}Changed", xiPropertyName);
            lEventNameInferred = true;
              }

              EventInfo lEv = mTarget.GetType().GetEvent(xiPropertyUpdateEventName);
              if (lEv == null)
              {
            if (!lEventNameInferred)
              throw new ArgumentException(string.Format("Event \"{0}\" not found on type {1}", xiPropertyUpdateEventName, xiTarget.GetType()));
              }
              else
              {
            if (!lEv.EventHandlerType.IsAssignableFrom(typeof(EventHandler)))
            {
              if (!lEventNameInferred)
            throw new ArgumentException(string.Format("Event \"{0}\" is incompatible with System.EventHandler on type {1}", xiPropertyUpdateEventName, xiTarget.GetType()));
            }
            else
            {
              lEv.AddEventHandler(mTarget, new EventHandler(this.ValueChangeHandler));
            }
              }
        }