我有一个包含propertygrid控件的Windows窗体(.NET 3.5)。 propertygrid控件定期刷新,显示它所代表的类中可能发生的任何更改。我希望仅在用户当前没有在网格中编辑属性时才进行刷新。有没有办法检测用户当前是否正在编辑控件?
答案 0 :(得分:2)
是的 - 它有点hacky但你可以找出属性网格的哪个子控件是活跃的,并根据它是什么做出有根据的猜测。以下似乎有效:
bool isEditing = (propertyGrid.ActiveControl.GetType().Name != "PropertyGridView");
答案 1 :(得分:1)
可能有,但是我可以建议您使用类型工具INotifyPropertyChanged
而不是在计时器上刷新网格吗?这样你就不必自己打电话给Refresh
;只要该属性发生变化,显示屏就会自动更新每个属性显示的值。
当然,如果您的类型具有大量属性,或者如果您使用网格动态显示许多不同类型的对象,则此建议可能不实用。这只是一个想法。
答案 2 :(得分:0)
这是一个相当复杂的问题。我建议采用双重方法:
如果控件未在特定阈值内修改并具有焦点,或如果控件没有焦点,我认为这足以确定它不是目前正在编辑。
答案 3 :(得分:0)
您可以连接OnLostFocus事件。这样,控件只有在不再具有焦点时才会更新。
protected virtual void OnLostFocus( EventArgs e)