dotnet/winforms

Discussion/proposal: add more LVCOLUMN ComCtl 6.0 features

Open

#2.627 aberto em 4 de jan. de 2020

Ver no GitHub
 (5 comments) (3 reactions) (2 assignees)C# (922 forks)batch import
api-approvedarea-controls-ListViewhelp wantedtenet-compatibility-OS

Métricas do repositório

Stars
 (4.100 stars)
Métricas de merge de PR
 (Mesclagem média 14d 22h) (56 fundiu PRs em 30d)

Description

In Windows Vista, more LVCOLUMN features were added: see https://docs.microsoft.com/en-us/windows/win32/api/commctrl/ns-commctrl-lvcolumnw

Missing Features

Minimum Width

  • Can set the LVCF_MINWIDTH flag on mask and set the cxMin value

Would add the following API on ColumnHeader

public class ColumnHeader
{
    ...
    public int MinimumWidth { get; set; } = 0;
    ...
}

E.g. Notice that when resizing the column its minimum width is 100 pixels Screen Recording 2020-01-04 at 08 25 pm

Fixed Width Columns

  • Can set the LVCF_FMT flag on mask an set the LVCFMT_FIXED_WIDTH flag on fmt

Would add the following API on ColumnHeader

public class ColumnHeader
{
    ...
    public bool FixedWidth { get; set; } = false;
    ...
}

E.g. Notice that the column can't be resized umn

Split Button Columns

  • Can set the LVCF_FMT flag on mask an set the LVCFMT_SPLITBUTTON flag on fmt

Would add the following API on ListView and ColumnHeader

public class ColumnDropDownClickEventArgs : ColumnClickEventArgs
{
    public ColumnDropDownClickEventArgs(int column, Point screenLocation);
    public Point ScreenLocation { get; set; }
}
public class ListView
{
    ...
    public event ColumnDropDownClickedEventHandler ColumnDropDownClicked { add; remove; }
    protected void OnColumnDropDownClicked(ColumnDropDownClickEventArgs e);
    ...
}
public class ColumnHeader
{
    ...
    public bool SplitButton { get; set; } = false;
    ...
}

E.g. Screen Recording 2020-01-04 at 09 15 pm

Discussion

  • Should we consolidate things like Split Button and Fixed width into a flags enum and add this as a property (e.g. Style) on ColumnHeader
[Flags]
public enum ColumnHeaderStyles
{
    None,
    FixedWidth = X,
    SplitButton = Y
}

/cc @weltkante

Guia do colaborador