我在非鍵盤pc上創建觸摸應用程序,我使用PropertyGrid
來管理用於存儲/保存應用程序配置的類。 我需要使用我創建的自定義鍵盤(不是系統的)將propertyline的行編輯爲UITypeEditor
現在,單擊右鍵時顯示自定義鍵盤。通過點擊PropertyGrid中的屬性文本框來顯示屬性編輯器
是否有可能顯示何時開始行編輯(如文本框輸入事件), 或當該行被選中?
我在非鍵盤pc上創建觸摸應用程序,我使用PropertyGrid
來管理用於存儲/保存應用程序配置的類。 我需要使用我創建的自定義鍵盤(不是系統的)將propertyline的行編輯爲UITypeEditor
現在,單擊右鍵時顯示自定義鍵盤。通過點擊PropertyGrid中的屬性文本框來顯示屬性編輯器
是否有可能顯示何時開始行編輯(如文本框輸入事件), 或當該行被選中?
您在PropertyGrid
中看到的編輯控件是GridViewEdit
控件,它是PropertyGridView
的子控件,它是PropertyGrid
的子控件。
您可以找到編輯控件並將事件處理程序分配給其Enter
事件。在這種情況下,您可以找到SelectedGridItem
,然後致電其EditPropertyValue
方法,該方法負責顯示UITypeEditor
。
private void propertyGrid1_SelectedObjectsChanged(object sender, EventArgs e)
{
var grid = propertyGrid1.Controls.Cast<Control>()
.Where(x => x.GetType().Name == "PropertyGridView").FirstOrDefault();
var edit = grid.Controls.Cast<Control>()
.Where(x => x.GetType().Name == "GridViewEdit").FirstOrDefault();
edit.Enter -= edit_Enter;
edit.Enter += edit_Enter;
}
private void edit_Enter(object sender, EventArgs e)
{
var item = this.propertyGrid1.SelectedGridItem;
if (item.GetType().Name == "PropertyDescriptorGridEntry")
{
var method = item.GetType().GetMethod("EditPropertyValue",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
var grid = propertyGrid1.Controls.Cast<Control>()
.Where(x => x.GetType().Name == "PropertyGridView").FirstOrDefault();
method.Invoke(item, new object[] { grid });
}
}
注:模態編輯的Enter
事件是煩人,並重復了一遍又一遍。爲了避免這種情況,您可以使用控件的事件Click
。
同樣作爲另一種選擇,您可以依靠SelectedGridItemChanged
事件PropertyGrid
並檢查e.NewSelection.GetType().Name == "PropertyDescriptorGridEntry"
然後使用反射調用EditPropertyValue
選定的網格項目。