Как создать строку в приложении WinForms?
Я хочу создать простую 3D-линию в приложении WinForms, чтобы улучшить визуальное расположение макета формы.
Эта строка очень похожа на строку в диалоговом окне О Windows (можно открыть в Проводнике Windows → Справка → О Windows).
Пример можно проверить здесь. Последняя строка (3D) является той, которую я хочу, а не первой.
Как это можно сделать на С# или Visual Basic (.NET)?
Спасибо
Ответы
Ответ 1
Если вы используете утилиту ZoomIt от SysInternals, вы можете видеть, что это просто две строки. Темно-серый над белым. Линии рисования достаточно просты с помощью Graphics.DrawLine(), вам просто нужно убедиться, что вы выбрали темный цвет, который хорошо работает с формой BackColor. Это не всегда линкор серый, если пользователь выбрал другую тему. Это делает трюк GroupBox плохим.
Этот пример кода можно исправить:
protected override void OnPaint(PaintEventArgs e) {
Color back = this.BackColor;
Color dark = Color.FromArgb(back.R >> 1, back.G >> 1, back.B >> 1);
int y = button1.Bottom + 20;
using (var pen = new Pen(dark)) {
e.Graphics.DrawLine(pen, 30, y, this.ClientSize.Width - 30, y);
}
e.Graphics.DrawLine(Pens.White, 30, y+1, this.ClientSize.Width - 30, y+1);
}
Обратите внимание на использование кнопки 1 в этом коде, чтобы удостовериться, что линия нарисована на правильной высоте, даже когда форма перемасштабирована. Выберите свой собственный контроль в качестве ссылки для линии.
Ответ 2
Добавьте элемент управления Label с трехмерной рамкой и без текста установите высоту на 2.
Ответ 3
Я также использовал взлом GroupBox, и он получил преимущество стилизации в зависимости от темы границы ОС.
Существует также класс Line в VB Power Packs. Там есть еще несколько плюсов, которые мы тоже использовали.
Изменить: Здесь мой класс Seperator для рисования горизонтальной линии с использованием упомянутого выше метода.
public class Separator : GroupBox
{
// Methods
protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
{
base.SetBoundsCore(x, y, width, 3, specified);
}
// Properties
[DefaultValue("")]
public override string Text
{
get
{
return string.Empty;
}
set
{
}
}
}
Ответ 4
Один из способов - создать групповой ящик без метки и высоты 0 (или это 1, не совсем помню). Я знаю, что раньше использовал этот трюк, даже если он чувствует себя немного взломанным:-)
Ответ 5
Вы можете получить эффект разделителя строк, добавив метку и установив ее текст в качестве подчеркивания "_"