Оказывается, это намного проще, чем я думал. Спасибо, что не приняли ни одного из моих других ответов. Вот двухэтапный процесс создания Fline ( f loating line - извините, уже поздно):
Шаг 1 : Добавьте UserControl в ваш проект и назовите его «Fline». Добавьте следующее в операторы using:
using System.Drawing.Drawing2D;
Шаг 2 : Добавьте следующее в событие изменения размера Fline:
int wfactor = 4; // half the line width, kinda
// create 6 points for path
Point[] pts = {
new Point(0, 0),
new Point(wfactor, 0),
new Point(Width, Height - wfactor),
new Point(Width, Height) ,
new Point(Width - wfactor, Height),
new Point(0, wfactor) };
// magic numbers!
byte[] types = {
0, // start point
1, // line
1, // line
1, // line
1, // line
1 }; // line
GraphicsPath path = new GraphicsPath(pts, types);
this.Region = new Region(path);
Скомпилируйте, а затем перетащите Fline на форму или панель. Важно: BackColor по умолчанию совпадает с формой, поэтому измените BackColor Fline на Red или что-то очевидное (в конструкторе). Одна странная странность в том, что когда вы перетаскиваете его в конструкторе, он отображается как сплошной блок, пока вы его не отпустите - не так уж и много.
Этот элемент управления может находиться перед любым другим элементом управления или позади него. Если для параметра Enabled установлено значение false, оно все равно будет отображаться, но не будет мешать событиям мыши на элементах управления под ним.
Вы, конечно, захотите улучшить это для своих целей, но это показывает основной принцип. Вы можете использовать ту же технику для создания элемента управления любой формы, которая вам нравится (мой первоначальный тест этого сделал треугольник).
Обновление : это также делает хороший плотный однострочный. Просто поместите это в событие Resize вашего UserControl:
this.Region=new Region(new System.Drawing.Drawing2D.GraphicsPath(new Point[]{new Point(0,0),new Point(4,0),new Point(Width,Height-4),new Point(Width,Height),new Point(Width-4,Height),new Point(0,4)},new byte[]{0,1,1,1,1,1}));