【问题标题】:Draw borders around some cells in a tablelayoutpanel在 tablelayoutpanel 中的某些单元格周围绘制边框
【发布时间】:2011-06-04 20:25:21
【问题描述】:

不要问为什么,但我需要在TableLayoutPanel 中的某些单元格周围画一个边框。

例如,为简单起见,假设我有一个 1 行 5 列的TableLayoutPanel。每个单元格中都有一个按钮。我想在前 3 个单元格周围画一个框,然后在最后 2 个单元格周围画一个框。所以总共有两个盒子。

关于如何实现这一点的任何建议?

谢谢。

【问题讨论】:

  • 为什么? ....... :)

标签: c# .net winforms tablelayoutpanel


【解决方案1】:

您可以使用CellPaint 事件并在需要时绘制边框:

tableLayoutPanel1.CellPaint += tableLayoutPanel1_CellPaint;

处理程序:

void tableLayoutPanel1_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
    if (e.Column == 1 && e.Row == 0)
        e.Graphics.DrawRectangle(new Pen(Color.Blue), e.CellBounds);
}

您可以使用ControlPaint 绘制任何类型的边框:

if (e.Column == 1 && e.Row == 0)
{
    var rectangle = e.CellBounds;
    rectangle.Inflate(-1, -1);

    ControlPaint.DrawBorder3D(e.Graphics, rectangle, Border3DStyle.Raised, Border3DSide.All); // 3D border
    ControlPaint.DrawBorder(e.Graphics, rectangle, Color.Red, ButtonBorderStyle.Dotted); // dotted border
}

【讨论】:

  • 我可以使用它绑定到一个方法吗?比如我会定义一个类似 PaintDesiredCell(int columnOrder, int rowOrder) {//codes} 的方法?有可能吗?
  • 我喜欢在调试时使用它。使用 dot Net 和 IronPython,我没有 GUI 构建器,因此在尝试查找错误时能够看到网格有很大帮助。我使用调试开关来确定是否连接了单元格绘制事件处理程序。
【解决方案2】:

访问 tableLayoutPanel 的属性并将 CellBorderStyle 设置为 Single

【讨论】:

  • 问题是关于单个单元格或一组单元格,而不是all cells
【解决方案3】:

绘图是编码错误修剪,加上代码污染。 在 winforms 中的 TableLayoutPanel 开始支持表格中的«border» 的基础知识之前,如果需要,最好使用带有额外表格的面板 (Dock:Fill)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多