我想在移动程序(.net cf 3.5)上从我的程序中打开一个组合框。
但不存在像cmbBox.DroppedDown
紧凑框架中
的属性访问 WinCE ComboBox DroppedDown 属性(.NET CF 2.0)
但我不想获得当前状态,而是设置它。
我该怎么做?
我想在移动程序(.net cf 3.5)上从我的程序中打开一个组合框。
但不存在像cmbBox.DroppedDown
紧凑框架中
的属性访问 WinCE ComboBox DroppedDown 属性(.NET CF 2.0)
但我不想获得当前状态,而是设置它。
我该怎么做?
使用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;
}
您可以采用与参考文章中相同的方法并向其发送消息。
而是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
再改进一点:
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;
}