3

这是我关于stackoverflow的第一个问题,所以如果我犯了任何错误,请多多包涵。

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

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

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

提前致谢。

4

1 回答 1

2

编辑(1:54 PM CST):您想要的代码是这样的,因为您将包装更新代码/方法调用以在其中进行更新:

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

}

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


使用此 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);

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

于 2012-07-10T18:13:13.870 回答