2011-09-26 94 views
1

有沒有一種簡單的方法來確定當前是否正在編輯一個屬性網格?C#PropertyGrid - 檢查一個值當前是否正在編輯

我的用例如下: 我每秒更新網格數據。如果用戶正在編輯一個值,當我的更新被調用時,所有輸入都會丟失。所以我想要做的只是當用戶沒有編輯任何東西時才更新。

+0

不適用。提供「啓用更新」複選框或者不要使用PG。 –

+0

這將....吸。沒有機會得到這個工作? – Boris

回答

4

我不認爲有任何官方的方式。但是,下面的代碼片段可以檢測何時使用內置文本框編輯器或下拉編輯器打開網格條目。它不檢測何時使用小的'...'編輯按鈕打開條目。

public static bool IsInEditMode(PropertyGrid grid) 
{ 
    if (grid == null) 
     throw new ArgumentNullException("grid"); 

    Control gridView = (Control)grid.GetType().GetField("gridView", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(grid); 
    Control edit = (Control)gridView.GetType().GetField("edit", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(gridView); 
    Control dropDownHolder = (Control)gridView.GetType().GetField("dropDownHolder", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(gridView); 

    return ((edit != null) && (edit.Visible & edit.Focused)) || ((dropDownHolder != null) && (dropDownHolder.Visible)); 
} 

當然,由於它是基於電網內部結構,它可能會在未來發生變化,所以請您自擔風險。

相關問題