【问题标题】:EPG Timeline controlEPG 时间线控制
【发布时间】:2013-10-16 14:24:09
【问题描述】:

我想创建一个显示 EPG 的应用程序,如下图所示: http://gonedigital.net/wp-content/uploads/SonyEPG.jpg

我需要一个控件来显示时间线。 我考虑使用datagridview,但我认为它不合适,因为不能为每一行设置列大小。 有可以使用的自定义控制吗? 如果没有,对如何开始有任何建议吗? 谢谢

编辑:

我使用了 TableLayoutPanel,它适用于少量数据。面对更大的数据,它会变得太小。 我搜索并发现SourceGrid 非常快速和灵活。

【问题讨论】:

  • TableLayoutPanel 可能会起作用。您可以设置列/行并使控件跨越多个列。
  • 谢谢!你能告诉我一个如何给表格中两个相邻的单元格添加标签的例子吗?

标签: c# .net winforms timeline epg


【解决方案1】:

当然...试试这个 TableLayoutPanel 示例,使用新表单。忽略颜色,因为它们很讨厌;而是关注网格布局以及标签如何跨列。这只是标题加上前三行。调整表单的宽度并注意如何保持比例:

public partial class Form1 : Form
{

    private TableLayoutPanel grid = new TableLayoutPanel();

    public Form1()
    {
        InitializeComponent();

        grid.RowCount = 9;
        for (int i = 1; i <= grid.RowCount; i++)
        {
            grid.RowStyles.Add(new RowStyle(SizeType.Percent, 42)); // all the same percent, the value doesn't matter
        }
        grid.ColumnCount = 16;
        for (int i = 1; i <= grid.ColumnCount; i++)
        {
            grid.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 42)); // all the same percent, the value doesn't matter
        }
        grid.Dock = DockStyle.Fill;
        this.Controls.Add(grid);

        this.BackColor = Color.Black;
        ExampleGrid();
    }

    private void ExampleGrid()
    {
        grid.Controls.Clear();

        AddEntry("Today", 0, 1, 3, Color.White, Color.Black, false);
        AddEntry("| 14:00", 0, 4, 3, Color.White, Color.Black, false);
        AddEntry("| 14:30", 0, 7, 3, Color.White, Color.Black, false);
        AddEntry("| 15:00", 0, 10, 3, Color.White, Color.Black, false);
        AddEntry("| 15:30", 0, 13, 3, Color.White, Color.Black, false);

        AddEntry("050", 1, 0, 1, Color.White, Color.Black, false);
        AddEntry("BBC HD", 1, 1, 3, Color.White, Color.Black, false);
        AddEntry("Mary Poppins", 1, 4, 8, Color.Black, Color.White, true);
        AddEntry("Dustbin Baby -->", 1, 12, 4, Color.White, Color.LightGray, true);

        AddEntry("051", 2, 0, 1, Color.White, Color.Black, false);
        AddEntry("ITV1 HD", 2, 1, 3, Color.White, Color.Black, false);
        AddEntry("Rosemary and Thyme", 2, 4, 6, Color.White, Color.Gray, true);
        AddEntry("Agatha Christie's Poirot -->", 2, 10, 6, Color.White, Color.LightGray, true);

        AddEntry("052", 3, 0, 1, Color.White, Color.Black, false);
        AddEntry("Channel 4 HD", 3, 1, 3, Color.White, Color.Black, false);
        AddEntry("The Green Berets", 3, 4, 5, Color.White, Color.Gray, true);
        AddEntry("Coach Trip", 3, 9, 3, Color.White, Color.LightGray, true);
        AddEntry("Countdown -->", 3, 12, 4, Color.White, Color.LightGray, true); 

        // ... etc ...
    }

    private void AddEntry(string text, int row, int col, int columnSpan, Color foreColor, Color backColor, bool border)
    {
        Label lbl = new Label();
        lbl.Text = text;
        lbl.AutoSize = false;
        lbl.AutoEllipsis = true;
        lbl.ForeColor = foreColor;
        lbl.BackColor = backColor;
        lbl.Dock = DockStyle.Fill;
        lbl.BorderStyle = border ? BorderStyle.FixedSingle : BorderStyle.None;
        lbl.TextAlign = ContentAlignment.MiddleLeft;
        grid.Controls.Add(lbl, col, row);
        grid.SetColumnSpan(lbl, columnSpan);
    }

}

【讨论】:

  • 非常感谢!这看起来很棒。请问有两个问题:1. TableLayoutPanel 是否比这里的 DataGridView 有优势。 2.如何处理更多向右的事件?可以滚动吗?谢谢
  • 我使用 DataGridView 的次数不多……不确定。滚动:要么重新填充整个网格以“移动”所有内容,要么使 TableLayoutPanel 具有更多列并使其更宽,但将其放置在 AutoScroll 设置为 true 的面板内。
  • 谢谢!我也必须将SizeType.Percent 更改为Absolute。我还尝试不使用面板将TableLayoutPanelAutoScroll 设置为true,并且它有效。再次感谢。
  • 抱歉,我还有一个问题。是否可以使标签相邻而不在它们之间留出空间?谢谢
  • 我认为它们之间的间距由 Margin() 属性控制。
猜你喜欢
  • 2012-09-19
  • 2010-12-07
  • 2011-02-22
  • 1970-01-01
  • 2020-01-08
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多