这是我在 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/