C#
WinForms
horizontal divider
UI design
duplicate question

Draw horizontal divider in winforms

Data Structures & Algorithms practice on Codemia

Step through 300+ coding interview problems with animated visualisers that show the data structure changing as the code runs. The Blind 75 are free.

Practice algorithms

Introduction

WinForms does not have a dedicated "horizontal divider" control, but creating one is simple once you know which tradeoff you want. For most forms, a thin Panel or Label is enough. If you need custom styling, drawing the line yourself in the control's paint event gives full control with very little code.

Use a Panel for the Simplest Divider

The easiest horizontal divider is a one-pixel or two-pixel Panel docked or positioned where you need separation.

csharp
1using System;
2using System.Drawing;
3using System.Windows.Forms;
4
5public class DividerForm : Form
6{
7    public DividerForm()
8    {
9        Text = "Divider Example";
10        Width = 400;
11        Height = 200;
12
13        var divider = new Panel
14        {
15            Height = 2,
16            Dock = DockStyle.Top,
17            BackColor = Color.LightGray
18        };
19
20        Controls.Add(divider);
21    }
22
23    [STAThread]
24    public static void Main()
25    {
26        Application.EnableVisualStyles();
27        Application.Run(new DividerForm());
28    }
29}

This approach is ideal when the divider is only decorative and does not need custom rendering.

Use a Label When You Want a Simple Sunken Line

An old but still useful trick is to use a Label with a border style:

csharp
1using System;
2using System.Drawing;
3using System.Windows.Forms;
4
5public class DividerForm : Form
6{
7    public DividerForm()
8    {
9        var divider = new Label
10        {
11            AutoSize = false,
12            Height = 2,
13            Width = 300,
14            Location = new Point(20, 40),
15            BorderStyle = BorderStyle.Fixed3D
16        };
17
18        Controls.Add(divider);
19    }
20
21    [STAThread]
22    public static void Main()
23    {
24        Application.EnableVisualStyles();
25        Application.Run(new DividerForm());
26    }
27}

This gives a slightly raised or sunken visual style, which can fit older desktop UIs nicely.

Draw the Divider Yourself for Full Control

If you want custom color, padding, or anti-aliased rendering, paint the line directly.

csharp
1using System;
2using System.Drawing;
3using System.Windows.Forms;
4
5public class DividerForm : Form
6{
7    public DividerForm()
8    {
9        Text = "Custom Divider";
10        Width = 400;
11        Height = 200;
12        DoubleBuffered = true;
13        Paint += OnPaintDivider;
14    }
15
16    private void OnPaintDivider(object? sender, PaintEventArgs e)
17    {
18        using var pen = new Pen(Color.SteelBlue, 2);
19        int y = 60;
20        e.Graphics.DrawLine(pen, 20, y, ClientSize.Width - 20, y);
21    }
22
23    [STAThread]
24    public static void Main()
25    {
26        Application.EnableVisualStyles();
27        Application.Run(new DividerForm());
28    }
29}

Custom painting is useful if the divider needs to respond to themes, resize dynamically, or match a more modern visual style than Fixed3D can provide.

Make the Divider Resize with the Form

A divider that looks correct only at one window size is rarely good enough. If you use Panel or Label, set anchoring or docking appropriately.

csharp
1var divider = new Panel
2{
3    Height = 1,
4    Left = 20,
5    Top = 50,
6    Width = 300,
7    BackColor = Color.Silver,
8    Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top
9};

That way, the line stretches when the form width changes.

If you use custom painting, the divider automatically follows ClientSize, which is one reason owner-drawn lines are appealing for responsive layouts.

Choose Based on Maintenance, Not Just Appearance

A divider is a small UI detail, so keep it simple unless the design truly needs more.

  • 'Panel is best for a quick, solid line'
  • 'Label is best for a native-looking etched effect'
  • custom paint is best for brand-specific styling

That order also roughly matches implementation complexity. In most WinForms applications, a Panel is enough and is easiest to maintain in the designer.

Common Pitfalls

  • Overengineering the divider with custom painting when a simple Panel would do.
  • Forgetting to anchor or dock the divider so it breaks on resize.
  • Using a Label border style and expecting pixel-perfect custom colors.
  • Drawing directly in the form without enabling double buffering on a busy UI.
  • Treating the divider as layout structure instead of a purely visual separator.

Summary

  • WinForms has no dedicated divider control, but creating one is easy.
  • A thin Panel is the best default for a horizontal divider.
  • A Label with Fixed3D can create a classic etched line effect.
  • Custom painting gives full styling control when needed.
  • Make sure the divider resizes correctly so it stays aligned with the form layout.

Course
Intermediate
27 lessons
14 hours
OOD Fundamentals

Master object-oriented design from first principles, SOLID, design patterns, and classic interview problems with hands-on coding.

View the course
Data Structures & Algorithms practice on Codemia

Step through 300+ coding interview problems with animated visualisers that show the data structure changing as the code runs. The Blind 75 are free.

Practice algorithms