RepositoryItemComboBox获得焦点弹出下拉框

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zx13525079024/article/details/54576126
在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);

    }


}





猜你喜欢

转载自blog.csdn.net/zx13525079024/article/details/54576126
今日推荐