RepositoryItemComboBox获得焦点弹出下拉框
来源:互联网 发布:四川房卡麻将源码 编辑:程序博客网 时间:2024/05/01 10:12
在dev中的gridcontrol中添加了一列RepositoryItemComboBox下拉框列,想要实现当RepositoryItemComboBox列获得焦点的时候,自动弹出下拉框,今天研究了一天,终于有结果了,先上图
主要思路实现如下
1.先让鼠标光标移到到RepositoryItemComboBox下拉单元格
2.然后模拟鼠标的单击事件
using DevExpress.XtraEditors.Controls;using DevExpress.XtraGrid.Views.Grid;using DevExpress.XtraGrid.Views.Grid.ViewInfo;using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Runtime.InteropServices;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace WindowsFormsApplication1{ public partial class Form2 : Form { List<User> list = new List<User>(); public Form2() { InitializeComponent(); } /// <summary> /// 页面加载 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form2_Load(object sender, EventArgs e) { repositoryItemComboBox1.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor; repositoryItemComboBox1.Items.Add("请选择"); repositoryItemComboBox1.Items.Add("男"); repositoryItemComboBox1.Items.Add("女"); list.Add(new User { Id = 1, UserName = "张三", Sex = 0, SexDes = "男" }); list.Add(new User { Id = 2, UserName = "李四", Sex = 0, SexDes = "男" }); list.Add(new User { Id = 3, UserName = "赵娅", Sex = 1, SexDes = "女" }); list.Add(new User { Id = 3, UserName = "王林", Sex = -1, SexDes = "请选择" }); this.gridControl1.DataSource = list; } /// <summary> /// 获取选择的内容 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { for (int i = 0; i < gridView1.RowCount; i++) { User user = (User)gridView1.GetRow(i); if (user.SexDes=="请选择") { user.Sex = -1; } if (user.SexDes == "男") { user.Sex =0; } if (user.SexDes == "女") { user.Sex =1; } MessageBox.Show(user.SexDes); } } /// <summary> /// 再gridview_keyup里面做事件判断 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void gridView1_KeyUp(object sender, KeyEventArgs e) { //当用户操作键盘上的tab键和上下左右键的时候, if ((e.KeyCode == Keys.Tab||e.KeyCode == Keys.Right || e.KeyCode == Keys.Left || e.KeyCode == Keys.Up || e.KeyCode == Keys.Down) && gridView1.FocusedColumn.FieldName == "SexDes") { GridView view = sender as GridView; GridViewInfo vi = view.GetViewInfo() as GridViewInfo; GridDataRowInfo rowInfo = vi.RowsInfo.GetInfoByHandle(gridView1.FocusedRowHandle) as GridDataRowInfo; if (rowInfo != null) { //获取RepositoryItemComboBox下拉单元格信息 GridCellInfo cellInfo = rowInfo.Cells[3]; //将下拉单元格所在的相对坐标转换为屏幕的绝对坐标 Point p = this.PointToScreen(new Point(this.gridControl1.Location.X + cellInfo.CellValueRect.X, this.gridControl1.Location.Y + cellInfo.CellValueRect.Y)); //设置鼠标位置 if (view.IndicatorWidth > 0 && gridView1.ColumnPanelRowHeight > 0) { MouseFlag.SetCursorPos(p.X + view.IndicatorWidth, p.Y + gridView1.ColumnPanelRowHeight); } else { MouseFlag.SetCursorPos(p.X+5 , p.Y); } //单击RepositoryItemComboBox下拉单元格 MouseFlag.MouseLefDownEvent(0, 0, 0); } } } } public class User { public int Id { get; set; } /// <summary> /// 名称 /// </summary> public string UserName { get; set; } /// <summary> /// 性别0男 1女,-1请选择 /// </summary> public int Sex { get; set; } /// <summary> /// 描述 /// </summary> public string SexDes { get; set; } } /// <summary> /// 鼠标操作相关类 /// </summary> public class MouseFlag { [DllImport("user32.dll")] static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo); [Flags] enum MouseEventFlag : uint { Move = 0x0001, LeftDown = 0x0002, LeftUp = 0x0004, RightDown = 0x0008, RightUp = 0x0010, MiddleDown = 0x0020, MiddleUp = 0x0040, XDown = 0x0080, XUp = 0x0100, Wheel = 0x0800, VirtualDesk = 0x4000, Absolute = 0x8000 } /// <summary> /// 模拟鼠标单击事件 /// </summary> /// <param name="dx"></param> /// <param name="dy"></param> /// <param name="data"></param> public static void MouseLefDownEvent(int dx, int dy, uint data) { mouse_event(MouseEventFlag.LeftDown | MouseEventFlag.LeftUp, dx, dy, data, UIntPtr.Zero); } /// <summary> /// 设置鼠标位置 /// </summary> /// <param name="x"></param> /// <param name="y"></param> [DllImport("User32")] public extern static void SetCursorPos(int x, int y); /// <summary> /// 获取鼠标位置 /// </summary> /// <param name="lpPoint"></param> /// <returns></returns> [DllImport("User32")] public extern static bool GetCursorPos(ref Point lpPoint); }}
0 0
- RepositoryItemComboBox获得焦点弹出下拉框
- jquery UI autocomplete获得焦点自动弹出跟随下拉框
- DevExpress gridview下拉框repositoryItemComboBox的使用
- ExtJs ComboBox 获得焦点 自动弹出下拉列表
- 文本框获取焦点并弹出下拉框
- 文本框获取焦点并弹出下拉框
- 文本框获得焦点时气泡弹出提示框
- kindeditor在dialog弹出框中无法获得焦点
- 使用popwindow制作弹出框与获得焦点弹出软键盘
- EditText获得焦点时阻止输入法弹出
- EditText获得焦点时阻止输入法弹出
- Extjs 弹出窗口文本框获得焦点
- android 获得焦点并弹出软键盘
- 设置EditText获得焦点,同时弹出小键盘
- bootstrap模态框弹出后如何获得焦点
- GridControl中添加下拉列表列RepositoryItemComboBox
- textField 获得焦点 弹出对话框,失去焦点关闭对话框
- Bootstrap 弹出框modal上层的输入框不能获得焦点问题
- 每天一个 Linux 命令(19):find 命令概览
- vue填坑之回到顶部:
- STM32存储器地址映射
- android 如何创建配置文件和读配置文件
- Struts2获取action
- RepositoryItemComboBox获得焦点弹出下拉框
- JAVA程序员必看的15本书-JAVA自学书籍推荐
- RabbitMQ (三) 发布/订阅
- 在Hive中如何实现数据分区
- 腾讯云(CentOS)搭建Hexo静态博客
- Spring的AOP
- 系统服务的控制
- Node.js之express生成器express-generator
- Libevent源码分析-----bufferevent工作流程探究