在C#中如何實現通過GetProperty()/SetProperty來獲取和設置屬性?如何通過函數增加和移除事件?
如:
  string sText=GetProperty(textBox1,"Text") ;
  SetProperty(textBox1,"Text","Data");
  如何實現 GetProperty()/SetProperty?  AddEvent(textBox1,"Click",tbClick);//tbClick為已定義好的Click事件
  RemoveEvent(textBox1,"Click");
  如何實現 AddEvent()/RemoveEvent
   

解决方案 »

  1.   

    private object GetProperty(object AObject, string APropertyName)
    {
        if (AObject == null) return null;
        Type vType = AObject.GetType();
        PropertyInfo vPropertyInfo = vType.GetProperty(APropertyName);
        if (vPropertyInfo == null) return null;
        return vPropertyInfo.GetValue(AObject, null);
    }private bool SetProperty(object AObject, string APropertyName, object AValue)
    {
        if (AObject == null) return false;
        Type vType = AObject.GetType();
        PropertyInfo vPropertyInfo = vType.GetProperty(APropertyName);
        if (vPropertyInfo == null) return false;
        vPropertyInfo.SetValue(AObject, AValue, null);
        return true;
    }private bool AddEvent(object AObject, string AEventName, Delegate AEvent)
    {
        if (AObject == null) return false;
        Type vType = AObject.GetType();
        EventInfo vEventInfo = vType.GetEvent(AEventName);
        if (vEventInfo == null) return false;
        vEventInfo.AddEventHandler(AObject, AEvent);
        return true;
    }private bool RemoveEvent(object AObject, string AEventName, Delegate AEvent)
    {
        if (AObject == null) return false;
        Type vType = AObject.GetType();
        EventInfo vEventInfo = vType.GetEvent(AEventName);
        if (vEventInfo == null) return false;
        vEventInfo.RemoveEventHandler(AObject, AEvent);
        return true;
    }private Delegate TextClickEvent = null;private void button1_Click(object sender, EventArgs e)
    {
        SetProperty(textBox1, "Text", "Zswang 路过!");
        Text = string.Format("{0}", GetProperty(textBox1, "Text"));
        TextClickEvent = new EventHandler(TextBox_Click);
        AddEvent(textBox1, "Click", TextClickEvent);
    }private void TextBox_Click(object sender, EventArgs e)
    {
        MessageBox.Show(((TextBox)sender).Text);
        RemoveEvent(sender, "Click", TextClickEvent);
    }
      

  2.   

    楼上的写得不错啊!
    不过我觉得楼主的意思是
    GetProperty()就是:string sText = textBox1.Text;
    SetProperty()就是:textBox1.Text = "Data";
    AddEvent()就是:textBox1.Click += new EventHandler(tbClick);
    RemoveEvent()就是:textBox1.Click -= tbClick;