2010-09-22 34 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"); 
相關問題