如何:在用户未编辑时刷新PropertyGrid

时间:2012-07-10 17:41:06

标签: c# .net winforms propertygrid

这是我关于stackoverflow的第一个问题,所以如果我犯了任何错误,请耐心等待。

背景 我有一个Winform PropertyGrid,它显示来自Camera对象的增益和曝光等状态。用户可以通过PropertyGrid轻松控制/编辑相机属性。同时,相机对象定期从物理相机查询最新状态,并通过INotifyProperfyChanged在PropertyGrid中刷新。

问题: 如果在用户输入/编辑propertygrid上的数据时发生了刷新(例如输入新的快门时间值),则焦点突然丢失,输入的值将被相机的新值替换。这导致了不友好的UI体验。

问题: 如何防止PropertyGrid在用户编辑时执行刷新?

提前致谢。

1 个答案:

答案 0 :(得分:2)

编辑(美国夏令时下午1:54):您想要的代码就是这样,因为您将更新代码/方法调用包装在其中进行更新:

if(FindFocusedControl(this).GetType().ToString() != "GridViewEdit")
{

}

这将检查活动控件(在本例中为propertygrid中的单元格)是否处于活动状态,如果为true,则跳过嵌套代码。


利用this SO question and answer中的以下方法,您应该能够在If条件中包装更新的任何代码,以检查正在关注/使用的控件。如果正在使用的控件是propertygrid,则不要执行任何操作。

    public static Control FindFocusedControl(Control control)
    {
        var container = control as ContainerControl;
        while (container != null)
        {
            control = container.ActiveControl;
            container = control as ContainerControl;
        }
        return control;

    }

如果您想尝试一下,请将表格传递给我,然后查看结果:

var a = FindFocusedControl(this);

由于您是新用户,如果这对您有效,您可以通过单击提供的答案左侧的复选标记来接受答案。这可以让其他用户在以后遇到您的问题时知道什么对您有用。