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
原创粉丝点击