2013-03-15 1 views

답변

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 
+0

필수 – tcarvin

+0

캐스팅 이 코드를 적용하려면 어디에 배치해야합니까? combobox.SelectIndex = 0;이 코드를 MyForm_Load 이벤트에 두었습니다. combobox.Focus(); 이 코드는 효과가 없습니다. – hellboy

+0

위 코드 스 니펫은 참조 된 아티클 (질문에있는 아티클)이 원하는 동작을 수행하는 데 필요한 수정 사항입니다. 당신도 그걸 검토해야 할 것입니다. – tcarvin

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; 
    } 
+0

그것은 작동합니다! 고맙습니다. – hellboy

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; 
}