【问题标题】:C# PropertyGrid - Check if a value is currently beeing editedC# PropertyGrid - 检查当前是否正在编辑值
【发布时间】:2011-09-26 09:57:32
【问题描述】:

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

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

【问题讨论】:

  • 不可用。提供“启用更新”复选框,或者干脆不使用 PG。
  • 那会....糟透了。没有机会让这个工作?

标签: c# propertygrid


【解决方案1】:

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

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

当然,由于它是基于网格的内部结构,未来可能会发生变化,所以使用风险自负。

【讨论】:

    猜你喜欢
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    相关资源
    最近更新 更多