2014-07-24 2 views
0

CF3.5에서 콤보 상자의 드롭 다운 높이를 설정하는 방법이 있습니까? CF에는 이러한 속성이 없으며 디자인에서도 그렇게 할 수 없습니다. 감사합니다. 감사합니다.콤보 상자의 드롭 다운 높이를 설정하십시오. CF3.5

// -------------------------------------------- -----------------최신 정보-------------------------------- ------------------------- //

[DllImport("coredll.dll")] 
    private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); 

    [StructLayout(LayoutKind.Sequential)] 
    struct RECT 
    { 
     public int left, top, right, bottom; 
    } 

    [StructLayout(LayoutKind.Sequential)] 
    struct COMBOBOXINFO 
    { 
     public int cbSize; 
     public RECT rcItem; 
     public RECT rcButton; 
     public int stateButton; 
     public IntPtr hwndCombo; 
     public IntPtr hwndItem; 
     public IntPtr hwndList; 
    } 

    public static IntPtr IntPtrAlloc<T>(T param) 
    { 
     IntPtr retval = Marshal.AllocHGlobal(Marshal.SizeOf(param)); 
     Marshal.StructureToPtr(param, retval, false); 
     return retval; 
    } 

    COMBOBOXINFO cbi = new COMBOBOXINFO(); 
    IntPtr cbiPointer = IntPtrAlloc(cbi); 
    SendMessage(comboBox1.Handle, CB_GETCOMBOBOXINFO, IntPtr.Zero, cbi); 

답변

0

나는 이것을 시도하지 않았지만 할 수 있다고 생각합니다. 콤보 상자의 OnHandleCreated를 재정의하고, pinvoke를 사용하여 드롭 다운 목록 컨트롤에 대한 핸들을 포함하는 Comboboxinfo 구조체와 함께 반환 할 CB_GETCOMBOBOXINFO (0x0162)로 SendMessage를 호출하고 핸들을 드롭 다운 목록에 저장합니다. 드롭 다운 높이를 업데이트하려면 드롭 다운 목록 핸들과 원하는 높이를 사용하여 SetWindowPos를 고정시킵니다.

+0

전이 문제를 극복하기위한 다른 방법을 찾았 기 때문에 안녕하세요, 지난 번이 게시물을 후속 조치하지 않았습니다. 자, 제안을 테스트하고 싶습니다만, SendMessage에 콤보 상자 구조체를 전달하여 정보가 채워지는 방법을 찾지 못하는 것 같습니다. 몇 가지 샘플 코드를 추가 했으므로 저를 고칠 수 있기를 바랍니다. 감사합니다. – Ytan

관련 문제