C#PropertyGrid - 检查当前是否正在编辑某个值

时间:2011-09-26 09:57:33

标签: c# propertygrid

是否有一种简单的方法可以确定用户当前是否正在编辑属性网格?

我的用例如下: 我每秒更新网格数据。如果用户正在编辑值,则在调用更新时所有输入都会丢失。所以我想要做的只是在用户没有编辑内容时更新。

1 个答案:

答案 0 :(得分: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));
}

当然,由于它基于网格内部结构,未来可能会发生变化,因此,使用风险自负。