列表视图预览

时间:2012-03-09 05:27:10

标签: c# winforms listview user-controls c#-2.0

我正在尝试构建类似电子邮件客户端的东西。 在收到的电子邮件列表中(列表很高,很窄), 我想显示发件人,主题和日期,但在一行上没有任何水平滚动。 例如,左上角的发件人,右上角的日期和第二行的主题。

我在Outlook中以及iPhone的邮箱中看到了这种列表。

我google了一下,看看是否有其他人建立了这种列表,但找不到任何列表。

我正在使用C#2.0 for Windows, NOT WPF。

任何建议都受到高度赞赏。

感谢您的时间。

-Rakib

2 个答案:

答案 0 :(得分:2)

我建议使用Better ListView。还提供免费软件变体Better ListView Express。

Better ListView修复了所有原始.NET ListView错误,您永远不需要解决它的缺点。最好的事情是Better ListView是100%托管代码的完全重写,一个ListView包装器:

Better ListView Overview

答案 1 :(得分:1)

要实现您想要的效果,您需要深入了解TableLayoutPanelPanel等布局控件。然后,您需要设计自己的UserControl显示一个电子邮件项目(EmailItemControl)。

完成后,您将拥有一个容器来容纳这些物品。为此,您可以使用FlowLayoutPanel。创建一个新的UserControl(EMailListControl),向其添加FlowLayoutPanelflowLayoutPanel1)并将其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);
    }
}