请先看之前文章:
WnGrid 在 IsAllowEdit=true 的情况下实现双击功能:http://xxb.lttc.cn/read-27.html
大家可能已经知道了,WnGrid 注册 DoubleClick 事件只会在 Grid 不可编辑状态下才会生效,或者需要双击前面的序号列才行,为了实现可编辑状态下列的双击事件,小伙伴们可谓sha费苦心(语文不好),终于,今天终于解锁了一个注册双击事件的新技能。
先看演示动图 Demo,代码如此简单,小伙伴们肯定想像不到。(点击打开查看原图)
好了,就是如此简单,不管是可编辑列,还是不可编辑列,或是只读列都可轻松实现双击事件。
技术是最不值得吝啬的东东,全部代码分享如下。
原创文章,如转载到自己的博客或哪里请注明作者(ifu25)及出处!
/// <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) =>
{
MessageBox.Show($"您双击了:第{arg.RowIndex + 1}行的{arg.ColumnName}");
});
需要 Demo 项目源文件的直接 QQ 我~