モバイル プログラム (.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;
}