2013-02-13 117 views
0

我遇到了propertyGrid的問題。PropertyGrid缺少textChanged事件

我有一個映射到PropertyGrid的 我有一個屬性「姓名」一類叫做DummySettings

當輸入PropertyGrid中的EG的東西的名稱屬性我想提出一個事件,「框TextChanged」

儘管實施了INotifyPropertyChanged事件並將其提高,並且儘管在PropertyGrid 上掛鉤了各種事件,但當文本更改時,沒有任何事件會觸發。

我是否缺少明顯的?

EDITED

的僞代碼

public class DummySettings : INotifyPropertyChanged 
      { 
       private string name; 


       [DisplayName("Name")] 
       public string Name 
       { 
        get { return name; } 
        set 
        { 
         if (name != value) 
         { 
          name = value; 
         OnPropertyChanged("Name"); 
         } 
        } 
       } 

       public event PropertyChangedEventHandler PropertyChanged; 

       protected virtual void OnPropertyChanged(string propertyName) 
       { 
        PropertyChangedEventHandler handler = PropertyChanged; 
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
       } 
      } 



     //UserControl 
    public partial class DummyControl : UserControl 
    { 
    private DummySettings settings; 

    ///Constructor 
    public DummyControl() 
    { 
     InitializeComponent(); 

     settings = new DummySettings(); 
     propertyGrid1.SelectedObject = settings; 
     settings.PropertyChanged += OnDummyPropertyChanged; 


    //All the events I have hooked up but not firing when text is changed 
    private void OnDummyPropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
      btnToEnable.Enabled = HasName(); 
    }   
    private void propertyGrid1_Leave(object sender, EventArgs e) 
    { 
       btnToEnable.Enabled = HasName(); 
    } 

    private void propertyGrid1_Validating(object sender, CancelEventArgs e) 
    { 
     btnToEnable.Enabled = HasName(); 
    } 

    private void propertyGrid1_SelectedObjectsChanged(object sender, EventArgs e) 
    { 
      btnToEnable.Enabled = HasName(); 
    } 


    private void propertyGrid1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 
    { 
     btnToEnable.Enabled = HasName(); 
    } 

     private bool HasName() 
    { 
     return settings.Name.IsNotNullOrEmpty(); 
    } 
+0

「我缺少明顯的?」 - 我們如何知道這個沒有代碼來檢查?! – Brian 2013-02-13 21:49:38

+0

嗨,添加代碼給你一個想法。原因是我沒有添加代碼,因爲我認爲有人會說「哦,你需要鉤住那個事件」。PropertyGrid似乎沒有一個textChanged發射相同的方式文本框在一個屬性上做。 – user9969 2013-02-13 23:09:34

回答

1

您可以使用PropertyValueChanged事件得到通知在PropertyGrid中改變選擇的對象屬性。所以,當你從「富」到「酒吧」改變Name屬性值,該事件將提高:

void propertyGrid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) 
{ 
    // previous value is e.OldValue, "Foo" 
    // property name is e.ChangedItem.Label, "Name" 
    // new value is e.ChangedItem.Value, "Bar" 
} 
+0

是的,我補充說,但它似乎只發射離開而不是當你鍵入文字 – user9969 2013-02-13 22:58:16

+0

是的,這個事件觸發時,屬性值改變。當你輸入文本時,對象的屬性值具有原始值。它只會改變當你離開輸入控制 – 2013-02-14 07:35:21

+0

@lazyberozovsky這對我來說並不好。任何解決方法 – user9969 2013-02-15 12:26:17