Как создать кнопку заголовка плоского столбца в виде списка (Windows Forms C #) - PullRequest
1 голос
/ 23 октября 2011

Как можно было бы создать кнопку FlatStyle для заголовка столбца списка в C #?Я немного исследовал это и наткнулся на этот код для VB: http://www.freevbcode.com/ShowCode.asp?ID=426

Я не уверен, как я мог бы сделать это в C #, и я также хотел бы знать, если есть лучший способделаю это.

Спасибо!

Ответы [ 3 ]

1 голос
/ 24 октября 2011

Этот код датируется более ранней версией Vista и больше не работает с новым визуальным стилем Vista для элементов управления заголовками.Вам также нужно будет отключить визуальный стиль рендеринга.Он также не будет работать в 64-битном режиме, обычном в наши дни.Еще один побочный эффект заключается в том, что пользователь больше не получает визуальную обратную связь при наведении на заголовок столбца, неизбежный побочный эффект отключения флага стиля HDS_BUTTON.

Anyhoo, вот код, который заставляет заголовки выглядеть плоскими.Добавьте новый класс в ваш проект и вставьте код, показанный ниже.Компиляция.Перетащите новый элемент управления из верхней части панели инструментов на форму.

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

class FlatListView : ListView {
    public FlatListView() {
        this.HeaderStyle = ColumnHeaderStyle.Nonclickable;
    }
    protected override void OnHandleCreated(EventArgs e) {
        if (this.View == View.Details) {
            IntPtr hHeader = SendMessage(this.Handle, LVM_GETHEADER, IntPtr.Zero, IntPtr.Zero);
            SetWindowTheme(hHeader, "", "");
        }
        base.OnHandleCreated(e);
    }

    private const int LVM_GETHEADER = 0x1000 + 31;
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
    [DllImport("uxtheme.dll")]
    private static extern int SetWindowTheme(IntPtr hWnd, string appname, string idlist);
}
0 голосов
/ 24 октября 2011

Вы можете сделать это, но пользователь не сможет нажимать на заголовки.

Если вы создаете столбцы в виде списка, когда пользователь отображает подробный вид, заголовки столбцов появляются и ведут себя как обычные кнопки. Это также означает, что пользователь может щелкнуть заголовок столбца, и вы можете принять меры. Если вам не нужен этот внешний вид и такое поведение , вы можете сделать так, чтобы столбцы выглядели flat . Эти характеристики контролируются свойством HeaderStyle класса ListView. Это свойство основано на перечислителе ColumnHeaderStyle. Его участники:

Clickable: это стиль по умолчанию. Заголовки столбцов появляются и ведут себя как кнопки:

listView1.HeaderStyle = ColumnHeaderStyle.Clickable;

enter image description here

Nonclickable: столбцы плоские и не изменяют свой внешний вид, когда пользователь нажимает один:

listView1.HeaderStyle = ColumnHeaderStyle.Nonclickable;

enter image description here

0 голосов
/ 24 октября 2011

Я не сразу знаю способ сделать это в форме окна, однако, если ваш код это позволяет, вы можете попробовать создать приложение WPF вместо формы Windows. Код, стоящий за ним, все еще будет C #, но он допускает гораздо более расширенные графические изменения.

Windows-формы иногда просто блокируют определенные визуальные возможности.

С уважением, Kevin

...