WinForm/C# 解锁 GridView 双击事件注册方式新技能 (原创)

xinggang · 2018年02月07日 · 81 次阅读

请先看之前文章:
WnGrid 在 IsAllowEdit=true 的情况下实现双击功能:http://xxb.lttc.cn/read-27.html

大家可能已经知道了,WnGrid 注册 DoubleClick 事件只会在 Grid 不可编辑状态下才会生效,或者需要双击前面的序号列才行,为了实现可编辑状态下列的双击事件,小伙伴们可谓sha费苦心(语文不好),终于,今天终于解锁了一个注册双击事件的新技能。 先看演示动图 Demo,代码如此简单,小伙伴们肯定想像不到。(点击打开查看原图) 20170826110254
好了,就是如此简单,不管是可编辑列,还是不可编辑列,或是只读列都可轻松实现双击事件
技术是最不值得吝啬的东东,全部代码分享如下。
原创文章,如转载到自己的博客或哪里请注明作者(ifu25)及出处!

【实现 GridView 双击事件通用工具类】

/// <summary>
/// 名称:XG Dev控件工具类
/// 作者:XingGang(willcoo@qq.com)
/// 日期:2018/02/06
/// </summary>
public static class XGDevUtils
{
/// <summary>
/// GridView的双击事件参数类
/// </summary>
public class GridViewDoubleClickArgs : EventArgs
{
    /// <summary>
    /// 列名
    /// </summary>
    public string ColumnName;

    /// <summary>
    /// 行索引
    /// </summary>
    public int RowIndex = -1;
}

/// <summary>
/// 注册GridView列的双击事件,支持可编辑和不可编辑列
/// </summary>
/// <param name="gv">GridView</param>
/// <param name="handler">双击事件委托</param>
public static void RegDoubleClickEvent(this GridView gv, EventHandler<GridViewDoubleClickArgs> handler)
{
    //不可编辑列双击事件处理
    gv.MouseDown += (s, e) =>
    {
        if (e.Button != MouseButtons.Left || e.Clicks != 2) return; //不是双击

        if (gv.State == GridState.ColumnDown) return; //是否列标题

        GridHitInfo info = gv.CalcHitInfo(e.X, e.Y);
        if (info.HitTest == GridHitTest.RowCell) //双击单元格
        {
            var arg = new GridViewDoubleClickArgs
            {
                ColumnName = info.Column.FieldName,
                RowIndex = info.RowHandle
            };
            handler(gv, arg);
        }
    };

    //可编辑列双击事件处理
    gv.ShownEditor += (s, e) =>
    {
        (s as GridView).ActiveEditor.DoubleClick += (s2, e2) =>
        {
            var arg = new GridViewDoubleClickArgs
            {
                ColumnName = gv.FocusedColumn.FieldName,
                RowIndex = gv.FocusedRowHandle
            };
            handler(gv, arg);
        };
    };
}
}

上面代码最好是放在封装的通用类里,然后大家平时编程时只需要调用以下代码:

//注册双击事件(同时支持编辑列和非编辑列)
gridView1.RegDoubleClickEvent((s, arg) =&gt;
{
MessageBox.Show($"您双击了:第{arg.RowIndex + 1}行的{arg.ColumnName}");
});

需要 Demo 项目源文件的直接 QQ 我~

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册