有没有办法检测用户是否正在编辑属性网格中的属性?

时间:2010-09-22 15:02:02

标签: c# .net propertygrid windows-forms-designer

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

4 个答案:

答案 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)