Как я могу создать строку в Приложении WinForms?

Я хочу создать простую 3D строку в приложении WinForms для улучшения визуального расположения моего макета формы. Эта строка является exacly как строка приблизительно в диалоговом окне Windows (может быть открыт в Windows Explorer-> Справка-> О Windows).

Пример быть проверенным здесь. Последняя (3D) строка является той, которую я хочу, не первый.

Как это может быть сделано в C# или Visual Basic (.NET)?

Спасибо

15
задан RHaguiuda 21 June 2010 в 18:17
поделиться

3 ответа

Если вы воспользуетесь утилитой 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);
    }

Обратите внимание на использование кнопки button1 в этом коде, чтобы убедиться, что линия рисуется с правильной высотой, даже когда форма масштабируется. Выберите свой собственный элемент управления в качестве ссылки для линии.

9
ответ дан 30 November 2019 в 23:56
поделиться

Один из способов - создать групповой блок без метки и высотой 0 (или это 1, не совсем помню). Я знаю, что использовал этот трюк раньше, даже если он кажется немного взломанным: -)

4
ответ дан 30 November 2019 в 23:56
поделиться

Я тоже использовал GroupBox hack, и у него есть преимущество - он сам себя стилизует на основе темы границ ОС.

В коллекции элементов управления VB Power Packs также есть класс Line. Там есть еще несколько полезных элементов, которые мы тоже использовали.

Edit: Вот мой класс 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
ответ дан 30 November 2019 в 23:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: