Вопрос по .net, c# – Рисование линии в Winforms

6

У меня возникают проблемы при рисовании линии в рамке группы в простой форме окна.

вот мой код:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();                        
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);            
            DrawLShapeLine(groupBox1.CreateGraphics(), 10, 10, 20, 40);
        }

        public void DrawLShapeLine(System.Drawing.Graphics g, int intMarginLeft, int intMarginTop, int intWidth, int intHeight)
        {
            Pen myPen = new Pen(Color.Black);
            myPen.Width = 2;
            // Create array of points that define lines to draw.
            int marginleft = intMarginLeft;
            int marginTop = intMarginTop;
            int width = intWidth;
            int height = intHeight;
            int arrowSize = 3;
            Point[] points =
             {
                new Point(marginleft, marginTop),
                new Point(marginleft, height + marginTop),
                new Point(marginleft + width, marginTop + height),
                // Arrow
                new Point(marginleft + width - arrowSize, marginTop + height - arrowSize),
                new Point(marginleft + width - arrowSize, marginTop + height + arrowSize),
                new Point(marginleft + width, marginTop + height)
             };

            g.DrawLines(myPen, points);
        }
    }

Если я присоединяю метод DrawLShapeLine к событию нажатия кнопки, он хорошо рисует, но не загружается при загрузке формы.

Пожалуйста посоветуй.

Ваш Ответ

5   ответов
4

Другой вариант - использовать линейный элемент управления, доступный в блоках питания Visual Basic.

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/d9e082c8-5386-4481-a744-1c9029805696/

Если у вас установлена Visual Studio 2008 с пакетом обновления 1 (SP1) или Visual Studio 2010, вам не нужно ничего загружать.

Если вы не видите элемент управления Visual Basic PowerPacks на панели инструментов, щелкните правой кнопкой мыши на панели инструментов и выберите Показать все в контекстном меню.

4

Подключите обработчик событий дляPaint событиеGroupBox и позвонитьDrawLShapeLine вместо этого из этого обработчика событий. Затем вы должны использоватьGraphics объект, предоставленный в аргументах события:

private void groupBox1_Paint(object sender, PaintEventArgs e)
{
    DrawLShapeLine(e.Graphics, 10, 10, 20, 40);
}

Поскольку ваш код выглядит сейчас, он попытается нарисовать вGroupBox когда форма требует покраски. Групповое поле может быть нарисовано в любом другом случае, и линия, которую вы рисуете, исчезнет.

1

Добавьте метку без текста, 3D-границы и высоту 2 (вы должны установить высоту на странице свойств, а не с графическим интерфейсом)!

25

Быстрый & amp; грязный:

Как насчет создания панели шириной в 1 пиксель и придания ей цвета фона?

Или дайте ему фиксированную единственную границу.
Это не делает диагональные линии, хотя.
Хороший совет, если вы неwant диагональные линии и хотят избежать GDI +, хотя.
0

Я не уверен, что происходит что-то еще, но вы должны нарисовать линию наGroupBoxсобытие Paint, а неForm& APOS; с.

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