Линии правил в диалоговых окнах - PullRequest
1 голос
/ 12 февраля 2011

Пример: Visual example from visual studio options Кто-нибудь знает, как создаются эти строки правил диалогового окна?Могут ли они быть созданы во время разработки с использованием общего элемента управления или они являются пользовательскими?

Я хотел бы просто перетащить один элемент в форму и расположить его, но не могу найти элемент управления (если онсуществует).

У кого-нибудь есть опыт их создания?

(я использую Visual Studio .NET 2010; C #)

Ответы [ 3 ]

2 голосов
/ 12 февраля 2011

Хорошо, ребята, благодаря информации, полученной из всех трех приведенных выше ответов (Ханс Пассант, Реддог и Итоулсон), я собрал рабочее решение.Ниже приводятся подробные сведения для будущих исследователей.

По сути, это подклассный элемент управления GroupBox, в котором рисуется только верхняя граница (с использованием ControlPaint.DrawBorder3D), а для свойства GroupBox.Text по умолчанию установлено значение emtpy.

Создайте файл класса (скажем, Seperator.cs), добавьте его в свой проект и вставьте в него следующее:

using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;

namespace your_namespace
{
    public class Separator : GroupBox
    {
        [DefaultValue("")]
        public override String Text
        {
            get {return String.Empty;}
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            ControlPaint.DrawBorder3D(
                e.Graphics,
                this.ClientRectangle,
                Border3DStyle.Etched,
                Border3DSide.Top
             );
        }
    }
}

Скомпилируйте свой проект.После того, как вы скомпилировали свой проект, компонент «Seperator» появится в разделе «your_namespace Components» панели инструментов в конструкторе Visual Studio.Затем вы можете просто перетащить компонент «Seperator» на вашу форму, расположить и сформировать его так, как вам нравится.

Еще раз спасибо всем, кто нашел время ответить, и я надеюсь, что это поможет любому в будущем, желающемурешить эту проблему.

1 голос
/ 12 февраля 2011

Используйте метод ControlPaint.DrawBorder3D:

private void Form1_Paint(object sender, PaintEventArgs e)
{
  ControlPaint.DrawBorder3D(
    e.Graphics,
    new Rectangle(10, 10, 300, 10),
    Border3DStyle.Etched,
    Border3DSide.Top);
}

Обратите внимание на использование Border3DSide.Top. Это позволяет избежать визуального сбоя с правой стороны, если вы используете трюк «Групповая коробка с минимальной высотой».

0 голосов
/ 12 февраля 2011

В соответствии с ответом Ганса , обычно достаточно GroupBox, и он прекрасно подходит для темы с ОС.

Мы храним в нашей управляющей библиотеке следующее:

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
        {
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...