我在无键盘电脑上创建触控应用程序,我使用PropertyGrid
管理类来存储/保存应用程序配置。
我需要使用我创建的自定义键盘(而不是系统)将类设置为UITypeEditor
来编辑属性行的行
现在,单击右键时会显示自定义键盘。
是否可以显示行开始编辑时(如文本框Enter事件), 或者当选择行时?
答案 0 :(得分:1)
您在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
。