繁体   English   中英

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

[英]C# PropertyGrid - Check if a value is currently beeing edited

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

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

我认为没有任何官方方式。 但是,下面的代码可以检测何时使用内置文本框编辑器或下拉菜单打开网格条目。 它不会检测何时使用小的“...”编辑按钮打开条目。

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));
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM