Перерисовка и нестандартная форма окон - PullRequest
2 голосов
/ 24 февраля 2011

Я использую C # 2.0 и хочу создать окно всплывающей подсказки в стиле Facebook.Я в настоящее время сделал это с 2 окнами и прозрачным ключом.Один для указателя треугольной стрелки и один для квадрата.Вся картинка выглядит так:

enter image description here

У меня проблема с перерисовкой (как показано на рисунке).

Есть ли способ использовать целое окно в форме?(В то время как мне нужно, чтобы это было заметно) Если нет, то это правильный способ сделать это?Или мне нужно «приклеить» треугольник к прямоугольнику

1 Ответ

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

Два способа решения -

Использование прозрачности: Форма Windows неправильной формы (C #)

Или использование Control.Region, которое фактически формирует окно,Множество образцов или: Как мне создать действительно прозрачный элемент управления?

protected override void OnSizeChanged(EventArgs e)
{
    base.OnSizeChanged(e);

    const int ArrowSize = 25;

    Point[] points = new[] {
        new Point(ArrowSize,    0),
        new Point(this.Width,   0),
        new Point(this.Width,   this.Height),
        new Point(ArrowSize,    this.Height),
        new Point(ArrowSize,    ArrowSize),
        new Point(0,            ArrowSize/2)
        // don't need - autocloses
        // ,new Point(ArrowSize,    0)
    };

    GraphicsPath path = new GraphicsPath();
    path.AddLines(points);
    this.Region = new Region(path);
}
...