Есть ли способ скрыть границу 'System.Windows.Forms.ListBox ()'? - PullRequest
0 голосов
/ 23 августа 2010

Есть ли способ скрыть System.Windows.Forms.ListBox() границу?

1 Ответ

5 голосов
/ 23 августа 2010

Если кому-то интересно ... это похоже на работу. Еще один большой палец вниз для компактных рамок.

public Form1()
    {
        InitializeComponent();

        ShowBorder(listView1.Handle, false);
    }

    private void ShowBorder(IntPtr handle, bool bShow)
    {
        int style = GetWindowLong(handle, GWL_STYLE);
        if (bShow)
        {
            style |= WS_BORDER;
        }
        else
        {
            style &= ~WS_BORDER;
        }
        SetWindowLong(handle, GWL_STYLE, style);
        SetWindowPos(handle, IntPtr.Zero, 0, 0, 0, 0, 
                     SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
    }

    const int GWL_STYLE = -16;
    const int WS_BORDER = 0x00800000;
    const int SWP_NOSIZE = 0x1;
    const int SWP_NOMOVE = 0x2;
    const int SWP_FRAMECHANGED = 0x20;

    [DllImport("coredll.dll")]
    private static extern int GetWindowLong(IntPtr hWnd, int nIndex);

    [DllImport("coredll.dll")]
    private extern static void SetWindowLong(IntPtr hwnd, 
                                             int nIndex, int dwNewLong);

    [DllImport("coredll.dll")]
    private static extern bool SetWindowPos(IntPtr hwnd, 
                                            IntPtr hWndInsertAfter, 
                                            int x, int y, 
                                            int cx, int cy, int uflags);
...