2010-09-22 38 views
2

我有一个Windows窗体(.NET 3.5),其中包含一个propertygrid控件。定期刷新propertygrid控件会显示它所代表的类中可能发生的任何更改。我只想在用户当前未在网格中编辑属性时进行刷新。有没有办法检测用户是否正在编辑控件?有没有办法检测用户是否正在编辑属性网格中的属性?

+3

有一点,PropertyGrid停止是一个合适的替代窗体与其自己的专用控件。你越来越近了。 – 2010-09-22 15:11:18

+0

我听说你的汉斯... – PICyourBrain 2010-09-23 12:00:50

回答

0

可能有,但我可以建议让你的类型工具INotifyPropertyChanged,而不是刷新计时器上的网格?这样你就不必自己拨打Refresh;只要该属性发生变化,显示器就会自动更新每个属性显示的值。当然,如果你的类型有很多属性,或者如果你使用你的网格来动态显示许多不同类型的对象,这个建议可能不实际。这只是一个想法。

+0

每MSDN INotifyPropertyChanged不能和PropertyGrid一起工作:网格中显示的信息是分配对象时属性的快照。如果在运行时以代码更改SelectedObject指定的对象的属性值,则不会显示新值,直到在导致网格刷新的网格中执行操作为止。 – CoryG 2017-02-18 04:23:55

0

这是一个相当复杂的问题。我建议采取两种方法:

如果控制尚未一定的阈值之内修改并具有焦点,如果控制不具有焦点,我认为这是足以确定其目前未被编辑。

0

您可以挂钩OnLostFocus事件。这样,只有当控件不再有焦点时,控件才会更新。

protected virtual void OnLostFocus(EventArgs e) 
2

是的 - 这是有点冒险,但你可以找出属性网格的哪个子控件是活动的,并根据它是什么进行有根据的猜测。以下似乎工作:

bool isEditing = (propertyGrid.ActiveControl.GetType().Name != "PropertyGridView"); 
相关问题