4

モバイル プログラム (.net cf 3.5) で自分のプログラムからコンボボックスを開きたい。

cmbBox.DroppedDownしかし、コンパクトフレームワークの ようなプロパティは存在しませんWinCE ComboBox DroppedDown プロパティへのアクセス (.NET CF 2.0) しかし、現在の状態を取得したくはありませんが、設定したいのです。

どうすればこれを実行できますか?

4

3 に答える 3

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;
    }
于 2013-03-15T12:13:17.747 に答える
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
于 2013-03-15T12:09:37.850 に答える
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;
}
于 2016-11-09T11:24:56.230 に答える