Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅为TableLayoutPanel单元格绘制外边框_C#_.net_Winforms - Fatal编程技术网

C# 仅为TableLayoutPanel单元格绘制外边框

C# 仅为TableLayoutPanel单元格绘制外边框,c#,.net,winforms,C#,.net,Winforms,例如,如果我有3行5列,我就使用TableLayoutPanel。我只想为整个面板绘制外边框。默认情况下,面板提供CellBorderStyle,将所有侧边框添加到所有可用单元格中。我们有没有办法只在境外设置 我在下面提供了一个示例代码 TableLayoutPanel tblPanel = new TableLayoutPanel; tblPanel.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single; La

例如,如果我有3行5列,我就使用TableLayoutPanel。我只想为整个面板绘制外边框。默认情况下,面板提供CellBorderStyle,将所有侧边框添加到所有可用单元格中。我们有没有办法只在境外设置

我在下面提供了一个示例代码

    TableLayoutPanel tblPanel = new TableLayoutPanel;
    tblPanel.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
    Label lblName;
    TextBox txtName;
    Button btnAdd;
    int colCnt = 0;
    for(int rw =0; rw < 3; rw++)
    {
            lblName = new Label();
            lblName.Name = "mylabel" + rw.ToString();
            tblPanel.Controls.Add(lblName, colCnt, rw);
            colCnt++;

            txtName = new TextBox();
            txtName.Name = "mytext" + rw.ToString();
            tblPanel.Controls.Add(txtName, colCnt, rw);
            colCnt++;

            btnAdd = new Button();
            btnAdd.Name = "mybutton" + rw.ToString();
            tblPanel.Controls.Add(btnAdd, colCnt, rw);

            colCnt = 0;
    }
TableLayoutPanel tblPanel=新的TableLayoutPanel;
tblPanel.CellBorderStyle=表格布局面板CellBorderStyle.Single;
标签lblName;
文本框txtName;
按钮btnAdd;
int colCnt=0;
对于(int rw=0;rw<3;rw++)
{
lblName=新标签();
lblName.Name=“mylabel”+rw.ToString();
添加(lblName、colCnt、rw);
colCnt++;
txtName=newtextbox();
txtName.Name=“mytext”+rw.ToString();
添加(txtName、colCnt、rw);
colCnt++;
btnAdd=新按钮();
btnAdd.Name=“mybutton”+rw.ToString();
添加(btnAdd、colCnt、rw);
colCnt=0;
}

我看你是一个非常新的海报。这里的行为准则是,你真的应该展示你所做的尝试,并指出技术问题。不,只是用那种方式问问题(特别是那些让你看起来好像什么都没试过的问题)

也就是说,为了帮助你,你最好自己画细胞边界。这将按照以下内容创建一些内容,然后进行自定义:

    public TableForm() {
        InitializeComponent();
        this.tableLayoutPanel.CellPaint += tableLayoutPanel_CellPaint;
    }

    private void tableLayoutPanel_CellPaint(object sender, TableLayoutCellPaintEventArgs e) {
        e.Graphics.DrawLine(Pens.Black, e.CellBounds.Location, new Point(e.CellBounds.Right, e.CellBounds.Top));
    }
在设计时:

在运行时:

TableLayOutPanel本身不支持border属性,CellBorderStyle除外,它不是您想要的

我建议您将TableLayOutPanel放入面板控件中,并将TableLayOutPanel的Dock属性设置为Fill


然后将面板的BorderStyle设置为所需(FixedSingle或Fixed3D)

TableLayoutPanel实际上支持您所需的BorderStyle属性。例如:

tableLayoutPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;

它装饰有:

[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]

因此,Intellisense不会向您展示它,但它是有文档记录的,并且是有效的。我不知道为什么它是不可浏览的。

您可以通过将属性CellBorderStyle更改为单个或所需的选择来实现

物业更改:

样本:


如果你不提供更多的上下文,你不可能得到好的答案。你已经试过什么了?没有这样的行为准则。这是一个问答网站。它旨在成为一个信息知识库,帮助他人避免浪费时间。请告诉我常见问题,其中提到了你所谓的行为准则。不要误会<代码>现在,有点离题了,任何人都可以提问,即使是出于懒惰和拙劣的设计。。。只是不要期望得到太多的尊重。。。更不用说他得到的答案了。代码热情是这里唯一值得尊敬的东西。
我去查看了这个问题的编辑历史。现在我明白为什么你对最初的问题不感兴趣了。:-)你能告诉我这一行在VB.net中是什么样子吗<代码>this.tableLayoutPanel.CellPaint+=tableLayoutPanel\u CellPaint非常感谢!谢谢你提供的信息。这是一个不太可能的简单解决方案!
public TestForm()
    {
        InitializeComponent();
        tableLayoutPanel.Paint += tableLayoutPanel_Paint;
    }

private void tableLayoutPanel_Paint(object sender, PaintEventArgs e){

       e.Graphics.DrawRectangle(new Pen(Color.Blue), e.ClipRectangle);

    }