1
有没有一种简单的方法来确定当前是否正在编辑一个属性网格?C#PropertyGrid - 检查一个值当前是否正在编辑
我的用例如下: 我每秒更新网格数据。如果用户正在编辑一个值,当我的更新被调用时,所有输入都会丢失。所以我想要做的只是当用户没有编辑任何东西时才更新。
有没有一种简单的方法来确定当前是否正在编辑一个属性网格?C#PropertyGrid - 检查一个值当前是否正在编辑
我的用例如下: 我每秒更新网格数据。如果用户正在编辑一个值,当我的更新被调用时,所有输入都会丢失。所以我想要做的只是当用户没有编辑任何东西时才更新。
我不认为有任何官方的方式。但是,下面的代码片段可以检测何时使用内置文本框编辑器或下拉编辑器打开网格条目。它不检测何时使用小的'...'编辑按钮打开条目。
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));
}
当然,由于它是基于电网内部结构,它可能会在未来发生变化,所以请您自担风险。
不适用。提供“启用更新”复选框或者不要使用PG。 –
这将....吸。没有机会得到这个工作? – Boris