c# - 如何: Refresh PropertyGrid when user is not editing

标签 c# .net winforms propertygrid

这是我在 stackoverflow 上的第一个问题,所以如果我有任何错误,请多多包涵。

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

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

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

提前致谢。

最佳答案

编辑(美国中部标准时间下午 1:54):您需要的代码是这样的,因为您将包装更新代码/方法调用以在其中执行更新:

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

}

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


利用 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);

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

关于c# - 如何: Refresh PropertyGrid when user is not editing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11418882/

相关文章:

c# - PictureBox 可以在 Windows 应用程序中显示动画 GIF 吗?

c# - python中的yield == C#中的yield return?

c# - 在线程池中的 Windows Phone 8 上创建图像缩略图

c# - 有什么办法可以在Linux容器中运行.NET Core App?

c# - 如何计算 ExpandoObject 的属性

mysql - 部署时使用 Crystal 报表部署 clickonce windows 应用程序时出错

c# - 如何检查文件是否以特定扩展名结尾然后将文件添加到列表?

c# - 检查列表是否包含特定集合的任何元素的最佳方法是什么?

c# - 当绑定(bind)到的数据库更新时,是否可以让 datagridview 自动更新?

c# - 如何从 TypeSpec 获取 TypeDef