布局控件

Panel

对其他控件进行分组,可添加滚动条

重要属性:

  • AutoScroll:是否自动显示滚动条
  • BorderStyle:边框样式
// 动态向Panel中添加按钮
private void Form1_Load(object sender, EventArgs e)
{
    Panel panel = new Panel();
    panel.Size = new Size(200, 200);
    panel.AutoScroll = true;
    this.Controls.Add(panel);

    for (int i = 0; i < 10; i++)
    {
        Button btn = new Button();
        btn.Text = "按钮" + i;
        btn.Location = new Point(10, i * 30);
        panel.Controls.Add(btn);
    }
}

GroupBox

将相关控件分组,提供标题和边框

重要属性:

  • Text:标题
  • FlatStyle:边框样式
  • 与Panel区别:
    • GroupBox自带标题和边框,适合逻辑分组
    • Panel更灵活,支持动态布局
// 在GroupBox中放置单选按钮
GroupBox groupBox1 = new GroupBox();
groupBox1.Text = "选择性别";
groupBox1.Location = new Point(20, 20);
this.Controls.Add(groupBox1);

RadioButton radioMale = new RadioButton();
radioMale.Text = "男";
radioMale.Location = new Point(10, 20);
groupBox1.Controls.Add(radioMale);

RadioButton radioFemale = new RadioButton();
radioFemale.Text = "女";
radioFemale.Location = new Point(10, 50);
groupBox1.Controls.Add(radioFemale);

FlowLayoutPanel

自动排列子控件(水平或垂直),支持动态调整布局

重要属性:

  • FlowDirection:方向(LeftToRight、TopDown等)
  • WrapContents:是否换行
// 动态添加按钮到FlowLayoutPanel
private void Form1_Load(object sender, EventArgs e)
{
    FlowLayoutPanel flowPanel = new FlowLayoutPanel();
    flowPanel.Dock = DockStyle.Fill; // 填充整个窗体
    flowPanel.FlowDirection = FlowDirection.LeftToRight;
    flowPanel.WrapContents = true;
    this.Controls.Add(flowPanel);

    for (int i = 0; i < 10; i++)
    {
        Button btn = new Button();
        btn.Text = "按钮" + i;
        btn.Width = 80;
        flowPanel.Controls.Add(btn);
    }
}

TabControl

用于实现多页签功能

属性:

  • TabPages:页签集合
  • Apperance:样式,Normal、Buttons、FlatButtons
  • Alignment:位置,Top、Bottom、Left、Right
  • Multiline:是否允许多行
  • SizeMode:宽度模式,Normal、FillToRight、Fixed
  • SelectedIndex:获取选中的页签索引
  • SelectedTab:获取选中的对象
    方法:
  • Add
  • Remove
    事件:
  • SelectedIndexChanged

高级技巧

自定义页签样式
通过重绘(DrawItem事件)实现自定义页签外观:

// 允许开发者自定义绘制页签,但所有页签高度固定(由 ItemSize 控制)
tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;
tabControl1.DrawItem += (sender, e) =>
{
    // 自定义绘制逻辑
    e.Graphics.FillRectangle(Brushes.LightGray, e.Bounds);
    TextRenderer.DrawText(e.Graphics, tabControl1.TabPages[e.Index].Text,
        e.Font, e.Bounds, Color.Blue, TextFormatFlags.VerticalCenter);
};

隐藏页签头

tabControl1.Appearance = TabAppearance.FlatButtons;
// 设置页签的固定宽度和高度
tabControl1.ItemSize = new Size(0, 1);
// 控制页签的尺寸调整逻辑(自动、固定(由 ItemSize 决定)或填充)
tabControl1.SizeMode = TabSizeMode.Fixed;

TabPage

是TabControl的组成部分,用于定义单个页签的内容区域。

属性:

  • Text:标题
  • BackColor
  • ImageIndex: 页签头显示图标索引,需配合 TabControl 的 ImageList 属性使用
  • Enabled:false时无法切换到
  • Visible:将不会显示出来
  • Controls:获取页签内子控件集合
    方法:
  • Dispose:释放页签及其子控件的资源
  • Show()/Hide():显示或隐藏页签
    事件:
  • Enter:当获得焦点出发
  • Leave:反之
posted @ 2025-03-22 22:52  南山有榛  阅读(31)  评论(0)    收藏  举报