自定义GridLookUpEdit编辑器
本文版权归博主 惊梦无痕 所有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。SourceLink
前两天分享了GridControl的自定义编辑器,今天再来分享一下整理出来的GridLookUpEdit的自定义编辑器。
本代码用的DevExpress版本号:17.2.6.0,旧的版本可能有些地方会有些微的变化。
该自定义编辑器需要用到上篇中定义的MyGridView(具体代码可在自定义GridControl编辑器一文中阅览),此控件包含了多列模糊查询功能,希望对使用或正在学习DevExpress的同学有所帮助。
后续有时间会陆续将一些比较实用的自定义编辑器分享出来。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using Comteck.Dto;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraEditors.Drawing;
using DevExpress.XtraEditors.Popup;
using DevExpress.XtraEditors.Registrator;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraEditors.ViewInfo;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Views.Base; namespace Comteck.Winforms.Controls {
/// <summary>
/// 自定义的GridLookupEdit,允许进行多列的匹配
/// <para>参照:https://www.devexpress.com/Support/Center/Example/Details/E1985 </para>
/// </summary>
[ToolboxItem(true)]
public class MyGridLookUpEdit : GridLookUpEdit {
/// <summary>
/// 自动注册下拉框编辑器
/// </summary>
static MyGridLookUpEdit() {
RepositoryItemMyGridLookUpEdit.RegisterCustomGridLookUpEdit();
} /// <summary>
/// 创建自定义GridLookupEdit
/// </summary>
public MyGridLookUpEdit() : base() {
Initialize();
} /// <summary>
/// 初始化
/// </summary>
private void Initialize() {
this.Tag = false; // 设置全选标记
this.Properties.AllowMouseWheel = false;
//this.EnterMoveNextControl = true;
this.Properties.ImmediatePopup = true;
this.Properties.TextEditStyle = TextEditStyles.Standard; #region 编辑框默认自动全选 // 鼠标移入文本编辑框触发事件
this.Enter += (sender, e) => {
// 设置全选标记
this.Tag = true;
this.SelectAll();
};
// 获取输入焦点时自动全选
this.MouseUp += (sender, e) => {
// 如果鼠标左键操作并且标记存在,则执行全选
if (e.Button == MouseButtons.Left && (bool)this.Tag) {
this.SelectAll();
} // 取消全选标记
this.Tag = false;
};
// 双击输入框时自动全选
this.DoubleClick += (sender, e) => {
this.SelectAll();
}; #endregion this.KeyDown += this.MyGridLookUpEdit_KeyDown;
} /// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MyGridLookUpEdit_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyCode == Keys.Delete) {
var control = sender as BaseEdit;
if (control.ReadOnly) { return; }
control.EditValue = null;
e.Handled = true;
} else if (e.KeyCode == Keys.Down) {
this.ShowPopup(); e.Handled = true;
} else if (e.KeyCode == Keys.Back) {
if (this.IsPopupOpen == false) {
this.ShowPopup(); e.Handled = true;
}
}
} /// <summary>
/// 自定义编辑器名称
/// </summary>
public override string EditorTypeName => RepositoryItemMyGridLookUpEdit.MyGridLookUpEditName; /// <summary>
/// 重写下拉框编辑器
/// </summary>
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public new RepositoryItemMyGridLookUpEdit Properties => base.Properties as RepositoryItemMyGridLookUpEdit; //
// 摘要:
// Gets or sets whether focus is moved to the next control (according to the tab
// order) when an end-user presses ENTER.
[DefaultValue(true)]
[DXCategory("Behavior")]
public override bool EnterMoveNextControl { get; set; } = true; /// <summary>
///
/// </summary>
/// <returns></returns>
protected override PopupBaseForm CreatePopupForm() {
return new MyGridLookUpPopupForm(this);
} /// <summary>
///
/// </summary>
/// <param name="e"></param>
/// <returns></returns>
public override bool IsNeededKey(KeyEventArgs e) {
return this.Properties.IsNeededKey(e.KeyData);
} /// <summary>
/// 正常情况下,在输入第一个字符(主要是数字及字母)后,虽然自动弹出了下拉框并过滤了数据,
/// 但是此时光标并未定位到下拉框中,导致回车后并未返回匹配到的首行记录
/// 此处就是为了解决以上问题,展开下拉框时自动定位到首行
/// </summary>
protected override void OnPopupShown() {
base.OnPopupShown(); BeginInvoke(new Action(() => {
if (this.GetSelectedDataRow() == null) {
this.Properties.View.FocusedRowHandle = ;
}
}));
}
} /// <summary>
/// 匹配自定义编辑器的下拉GridLookUpEdit
/// </summary>
[DXCategory("Properties")]
[UserRepositoryItem("RegisterMyGridLookUpEdit")]
public class RepositoryItemMyGridLookUpEdit : RepositoryItemGridLookUpEdit {
/// <summary>
/// 编辑器的名称
/// </summary>
public const string MyGridLookUpEditName = "MyGridLookUpEdit"; /// <summary>
/// 注册编辑器
/// </summary>
static RepositoryItemMyGridLookUpEdit() {
RegisterCustomGridLookUpEdit();
} /// <summary>
/// 创建自定义的编辑器
/// </summary>
public RepositoryItemMyGridLookUpEdit() {
// 不允许自动完成
base.AutoComplete = false;
} /// <summary>
/// 编辑器名称
/// </summary>
public override string EditorTypeName => MyGridLookUpEditName; /// <summary>
/// 注册编辑器
/// </summary>
public static void RegisterCustomGridLookUpEdit() {
EditorRegistrationInfo.Default.Editors.Add(
new EditorClassInfo(
MyGridLookUpEditName,
typeof(MyGridLookUpEdit),
typeof(RepositoryItemMyGridLookUpEdit),
typeof(GridLookUpEditBaseViewInfo),
new ButtonEditPainter(),
true));
} /// <summary>
/// 创建自定义GridView
/// </summary>
/// <returns></returns>
protected override ColumnView CreateViewInstance() {
return new MyGridView();
} /// <summary>
/// 创建自定义GridControl
/// </summary>
/// <returns></returns>
protected override GridControl CreateGrid() {
return new MyGridControl();
}
} public class MyGridLookUpPopupForm : PopupGridLookUpEditForm
{
public MyGridLookUpPopupForm(GridLookUpEdit ownerEdit)
: base(ownerEdit) {
} protected override void OnKeyDown(KeyEventArgs e) {
if (e.KeyCode == Keys.Tab) {
this.OwnerEdit.EditValue = QueryResultValue();
this.OwnerEdit.SendKey(e);
} base.OnKeyDown(e);
}
}
}
自定义GridLookUpEdit编辑器的更多相关文章
- springmvc自定义日期编辑器
1.控制器 @Controller public class MyController { // 处理器方法 @RequestMapping(value = "/first.do" ...
- 使用 TypeScript,React,ANTLR 和 Monaco Editor 创建一个自定义 Web 编辑器(二)
译文来源 欢迎阅读如何使用 TypeScript, React, ANTLR4, Monaco Editor 创建一个自定义 Web 编辑器系列的第二章节, 在这之前建议您阅读使用 TypeScrip ...
- 我的第一个npm包:wechat-menu-editor 基于Vue的微信自定义菜单编辑器
wechat-menu-editor 微信自定义菜单编辑器 前言 在做微信公众号相关开发时,基本上会去开发的功能就是微信自定义菜单设置的功能,本着不重复造轮子的原则,于是基于Vue封装的一个微信自定义 ...
- 自定义GridControl编辑器
本文版权归博主 惊梦无痕 所有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作.SourceLink 鉴于网上的针对GridControl的一些代码比较凌乱,且功能分散,故将整理过的代码分享出来 ...
- C#如何在DataGridViewCell中自定义脚本编辑器
上一篇博文探讨了如何自定义DataGridViewColumn实现一个TreeViewColumn来在DataGridView控件中显示TreeView控件,其实我们还可以继续发挥想象,自定义其他的列 ...
- 如何自定义kindeditor编辑器的工具栏items即去除不必要的工具栏或者保留部分工具栏
kindeditor编辑器的工具栏主要是指编辑器输入框上方的那些可以操作的菜单,默认情况下编辑器是给予了所有的工具栏.针对不同的用户,不同的项目,不同的环境,可能就需要保留部分工具栏.那么我们应该如何 ...
- Unity编辑器:自定义编辑器样式——GUIStyle
通过GUIStyle,可以自定义Unity编辑器的样式. GUIStyle可以new一个全新的实例,这样,需要自己处理所有自己需要的效果. GUIStyle还可以基于已经存在的实例new一个新的实例, ...
- 【Unity】自定义编辑器窗口——拓展编辑器功能
最近学习了Unity自定义编辑器窗口,下面简单总结,方便用到时回顾. 新建一个脚本: using UnityEngine; using System.Collections; using UnityE ...
- 百度编辑器(UEditor)自定义工具栏
百度编辑器(UEditor)自定义工具栏的自定义 百度编辑器默认功能比较齐全,但是不一定是我们所需要的,有的功能可以去掉,用自己想要的就可以了,可以参考百度官方文档! 百度编辑器默认配置展示界面 如何 ...
随机推荐
- datalist 分页
Asp.net提供了三个功能强大的列表控件:GridView.DataList和Repeater控件,相对GridView,DataList和Repeater控件具有更高的样式自定义性,很多时候我们喜 ...
- Hadoop 3.x 新特性剖析系列2
1.概述 接着上一篇博客的内容,继续介绍Hadoop3的其他新特性.其内容包含:优化Hadoop Shell脚本.重构Hadoop Client Jar包.支持等待Container.MapReduc ...
- SSM博客 前端页面样式不显示
<!-- 由于在web.xml中定义的url拦截形式为“/”表示拦截所有的url请求, 包括静态资源例如css.js等.所以需要在springmvc.xml中添加资源映射标 --> < ...
- 嵌入Python系列 | 调用Python模块中无参数函数
开发环境 Python版本:3.6.4 (32-bit) 编辑器:Visual Studio Code C++环境:Visual Studio 2013 需求说明 在用VS2013编写的Win32程序 ...
- USB/GPIO/SDIO
通用串行总线(英语:Universal Serial Bus,缩写:USB)是连接计算机系统与外部设备的一种串口总线标准,也是一种输入输出接口的技术规范.它只有4根线,两个电源(5V,地线),两个数据 ...
- Mybatis通过注解方式实现批量插入数据库 及 常见的坑
原文地址:http://f0rb.iteye.com/blog/1207384 MyBatis中通过xml文件配置数据库批量操作的文章很多,比如这篇http://www.cnblogs.com/xcc ...
- ssh商城源码 2017.6.30
http://www.cnblogs.com/chiangchou/p/project-ebuy.html http://www.java1234.com/vipzy.html源码视频链接
- 无service.bat的tomcat服务怎么设置自启动
在正式环境中,经常需要设置tomcat自启动,这样在重启系统服务器后就不需要再手动去开启tomcat服务器了.通过设置tomcat下的service.bat可以实现自启动的目的,但有时候会发现自己的t ...
- CopyOnWriteArrayList简介
CopyOnWriteArrayList,写数组的拷贝,支持高效率并发且是线程安全的,读操作无锁的ArrayList.所有可变操作都是通过对底层数组进行一次新的复制来实现. CopyOnWriteAr ...
- []T 还是 []*T, 这是一个问题
全面分析Go语言中的类型和类型指针的抉择 目录 [−] 副本的创建 T的副本创建 *T的副本创建 如何选择 T 和 *T 什么时候发生副本创建 最常见的case map.slice和数组 for-ra ...