代码调用控件右边的小箭头 应用于 DateTimePicKer Comobox

本文介绍了如何使用系统API调用来模拟点击DateTimePicker或ComboBox控件右侧的小箭头,以便展开选择日期或选项。首先,通过SendMessage方法发送WM_SYSKEYDOWN消息来触发下拉,然后提供了一种通用的方法,模拟鼠标移动到箭头位置并按下释放左键,以兼容第三方控件。代码示例中包含DllImport导入和鼠标事件的枚举定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1.声明
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern long SendMessage(IntPtr hWnd, uint Msg, uint wParam, long lParam);
const int WM_SYSKEYDOWN = 0x0104, VK_DOWN = 0x28;

2.调用
SendMessage(Control.Handle, WM_SYSKEYDOWN, VK_DOWN, 0);

20090629 通用调用小箭头
(上面的在微软提供的控件中测试通过,但第三方控件有的不行,建议用以下方式)
基本思想为:移动鼠标到下拉箭头的位置,然后再按下鼠标左键,最后把鼠标移动回原来的位置
代码如下:
        //发送鼠标按下事件
        [System.Runtime.InteropServices.DllImport("user32")]      
        static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
        //设置鼠标位置
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        public static extern bool SetCursorPos(int X, int Y);  
      
        //鼠标事件标识
        [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
        }

//调用方式
           Point mousePoint = MousePosition;
            int X = this.Location.X+this.Width-5, Y = this.Location.Y+this.Height-5; //坐标
            Point p = new Point(0, 0);
            p.X = this.Width - (SystemInformation.VerticalScrollBarWidth / 2);
            p.Y = this.Height - (SystemInformation.HorizontalScrollBarHeight / 2);
            p = PointToScreen(p);
            SetCursorPos(p.X, p.Y);
            mouse_event(MouseEventFlag.LeftDown, p.X, p.Y, 0, UIntPtr.Zero);
            mouse_event(MouseEventFlag.LeftUp, p.X, p.Y, 0, UIntPtr.Zero);
            SetCursorPos(mousePoint.X, mousePoint.Y);

欢迎提供更好的解决方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值