2013-02-13 80 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