【问题标题】:How to make all GridViews behave the same?如何使所有 GridView 的行为相同?
【发布时间】:2013-12-27 08:41:25
【问题描述】:

我面临以下情况:

我有几个控件,每个控件都包含一个 DevExpress GridView。我想要的是让所有这些 GridView 的行为都相同(例如,在 gridView 中按下 tab 键时应该将焦点更改为另一个控件 - 这只是一个示例 -)。

如何在不扩展 GridView 或不扩展包含 GridView 的控件的情况下实现此目的?

谢谢!

【问题讨论】:

  • 您为什么不愿意扩展 Gridview?您的解决方案中有多少个网格?为什么不能为所有网格视图复制相同的属性?
  • class MyGridView : Gridview
  • @ViSu 这个数字很大,这就是我寻找替代解决方案的原因
  • @SriramSakthivel 不扩展描述中提到的 GridView
  • @mirelvlad 这就是我们要问的为什么?任何原因?没有灵丹妙药可以为您提供您想要实现的目标。如果您需要,T4 模板可以为您提供生成代码。

标签: c# winforms gridview devexpress


【解决方案1】:

当我意识到我所有的 GV 都以相同的方式运行时,我也有类似的想法,而且我浪费了很多时间来定制每个新实例。但到目前为止,制作自定义后代是最好的选择(我的应用程序中有 cca​​ 200 GV)。

制作一个好的后代可以为您节省大量时间,并且您可以通过简单的搜索和替换将现有的 GV 更改为新的。

在扩展之前,请务必阅读DevExpress Support page 上有关创建设计时就绪 GV 的文章。

【讨论】:

    【解决方案2】:

    最后,我想出了以下解决方案:

    我在GridViewGridControl上创建了一个扩展方法:

        /// <summary>
        /// Switches the focus to the next when control on tab key pressed.
        /// </summary>
        /// <param name="gridControl">GridView's grid control</param>
        public static void ApplyTabStopBehavior(this GridControl gridControl)
        {
            gridControl.ProcessGridKey += (sender, e) =>
            {
                var gridView = gridControl.FocusedView as GridView;
                if (gridView != null && e.KeyCode == Keys.Tab)
                {
                    ProcessTabKey(gridView, e);
                }
            };
        }
    

    在我的例子中,这个方法监听任何 Tab 键被按下并执行焦点切换。

    希望它也能帮助其他人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 2023-01-04
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多