.NET CF为组合框设置'DroppedDown'

时间:2013-03-15 11:32:36

标签: c# combobox compact-framework

我想在移动程序中使用我的程序打开一个组合框(.net cf 3.5)。

但紧凑框架中不存在cmbBox.DroppedDown之类的属性 Accesing WinCE ComboBox DroppedDown property (.NET CF 2.0) 但我不想获得当前状态,而是设置它。

我该如何执行此操作?

3 个答案:

答案 0 :(得分:7)

使用CB_SHOWDROPDOWN = 0x014F消息:

    public const int CB_GETDROPPEDSTATE = 0x0157;
    public static bool GetDroppedDown(ComboBox comboBox)
    {
        Message comboBoxDroppedMsg = Message.Create(comboBox.Handle, CB_GETDROPPEDSTATE, IntPtr.Zero, IntPtr.Zero);
        MessageWindow.SendMessage(ref comboBoxDroppedMsg);
        return comboBoxDroppedMsg.Result != IntPtr.Zero;
    }

    public const int CB_SHOWDROPDOWN = 0x014F;
    public static bool ToogleDropDown(ComboBox comboBox)
    {
        int expand = GetDroppedDown(comboBox) ? 0 : 1;
        int size = Marshal.SizeOf(new Int32());
        IntPtr pBool = Marshal.AllocHGlobal(size);
        Marshal.WriteInt32(pBool, 0, expand);  // last parameter 0 (FALSE), 1 (TRUE)
        Message comboBoxDroppedMsg = Message.Create(comboBox.Handle, CB_SHOWDROPDOWN, pBool, IntPtr.Zero);
        MessageWindow.SendMessage(ref comboBoxDroppedMsg);
        Marshal.FreeHGlobal(pBool);
        return comboBoxDroppedMsg.Result != IntPtr.Zero;
    }

答案 1 :(得分:4)

您可以采用与引用文章中相同的方法并向其发送消息。

而是使用const int CB_SHOWDROPDOWN = 0x14F作为您的信息。

从该参考样本中,修改了一下:

Message.Create(comboBox.Handle, CB_SHOWDROPDOWN , (IntPtr)1, IntPtr.Zero); // to open

Message.Create(comboBox.Handle, CB_SHOWDROPDOWN , (IntPtr)0, IntPtr.Zero); // to close

答案 2 :(得分:0)

稍微改善一下:

public bool ToogleDropDown()
{
    int expand = GetDroppedDown() ? 0 : 1;
    //int size = Marshal.SizeOf(new Int32());
    //IntPtr pBool = Marshal.AllocHGlobal(size);
    //Marshal.WriteInt32(pBool, 0, expand);  // last parameter 0 (FALSE), 1 (TRUE)
    Message comboBoxDroppedMsg = Message.Create(this.Handle, CB_SHOWDROPDOWN, (IntPtr)expand, IntPtr.Zero);
    MessageWindow.SendMessage(ref comboBoxDroppedMsg);
    //Marshal.FreeHGlobal(pBool);
    return comboBoxDroppedMsg.Result != IntPtr.Zero;
}