Listview с предварительным просмотром - PullRequest
1 голос
/ 09 марта 2012

Я пытаюсь создать что-то вроде почтового клиента. В списке входящих писем (список высокий, узкий), Я хочу показать Отправителя, тему и дату, но без горизонтальной прокрутки в одной строке. Например, отправитель в верхнем левом углу, дата в верхнем правом углу и тема во второй строке.

Я вижу этот вид списка в Outlook, а также в почтовом ящике iPhone.

Я немного погуглил, чтобы посмотреть, построил ли кто-нибудь еще такой список, но не смог найти.

Я использую C # 2.0 для Windows, НЕ WPF.

Любое предложение высоко ценится.

Спасибо за ваше время.

-Rakib

Ответы [ 2 ]

2 голосов
/ 24 марта 2012

Я бы порекомендовал использовать Better ListView .Доступен также бесплатный вариант Better ListView Express.

Better ListView исправляет все исходные ошибки .NET ListView, и вам никогда не придется устранять его недостатки.И лучше всего то, что Better ListView - это полное переписывание 100% управляемого кода, не обертки ListView:

Better ListView Overview

1 голос
/ 09 марта 2012

Чтобы достичь желаемого, вам нужно изучить элементы управления макетом, такие как TableLayoutPanel, Panel и т. Д. Затем вам нужно создать собственный UserControl, который будет отображать один элемент электронной почты EmailItemControl).

Как только вы закончите с этим, у вас будет контейнер для хранения этих предметов. Для этого вы можете использовать FlowLayoutPanel. Создайте новый UserControl (EMailListControl), добавьте к нему FlowLayoutPanel (flowLayoutPanel1) и установите для стиля Dock значение Fill.

Вот базовая реализация EMailListControl:

public partial class EMailListControl : UserControl
{
    public EMailListControl()
    {
        InitializeComponent();

        flowLayoutPanel1.FlowDirection = FlowDirection.TopDown;
        flowLayoutPanel1.WrapContents = false;
        flowLayoutPanel1.AutoScroll = true;

        flowLayoutPanel1.Resize += new EventHandler( flowLayoutPanel1_Resize );
    }

    private void flowLayoutPanel1_Resize( object sender, EventArgs e )
    {
        foreach ( Control control in flowLayoutPanel1.Controls )
        {
            UpdateControlWidth(control);
        }
    }

    private void UpdateControlWidth(Control control)
    {
        control.Width = flowLayoutPanel1.Width - (flowLayoutPanel1.VerticalScroll.Visible ? SystemInformation.VerticalScrollBarWidth : 0);
    }

    public void AddEmailItem( EmailItemControl control )
    {
        UpdateControlWidth(control);
        flowLayoutPanel1.Controls.Add(control);
    }
}
...