모바일 프로그램 (.net cf 3.5)에서 내 프로그램의 콤보 상자를 열려고합니다..NET CF에서 콤보 박스로 'DroppedDown'을 설정했습니다.
하지만, 컴팩트 프레임 워크에 cmbBox.DroppedDown
같은 속성이 존재하지 않는 Accesing WinCE ComboBox DroppedDown property (.NET CF 2.0) 하지만 현재 상태를 얻을 싶지는 않지만 그것을 설정할 수 있습니다.
어떻게해야합니까?
모바일 프로그램 (.net cf 3.5)에서 내 프로그램의 콤보 상자를 열려고합니다..NET CF에서 콤보 박스로 'DroppedDown'을 설정했습니다.
하지만, 컴팩트 프레임 워크에 cmbBox.DroppedDown
같은 속성이 존재하지 않는 Accesing WinCE ComboBox DroppedDown property (.NET CF 2.0) 하지만 현재 상태를 얻을 싶지는 않지만 그것을 설정할 수 있습니다.
어떻게해야합니까?
참조 된 문서에서와 같은 방식으로 메시지를 보낼 수 있습니다.
메시지 대신 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
는 사용 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;
}
그것은 작동합니다! 고맙습니다. – hellboy
더 향상된 비트 : 그냥 추가 편집
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;
}
필수 – tcarvin
캐스팅 이 코드를 적용하려면 어디에 배치해야합니까? combobox.SelectIndex = 0;이 코드를 MyForm_Load 이벤트에 두었습니다. combobox.Focus(); 이 코드는 효과가 없습니다. – hellboy
위 코드 스 니펫은 참조 된 아티클 (질문에있는 아티클)이 원하는 동작을 수행하는 데 필요한 수정 사항입니다. 당신도 그걸 검토해야 할 것입니다. – tcarvin