Как создать непрямоугольную форму окна в c #? - PullRequest
7 голосов
/ 26 марта 2011

Есть ли способ создания непрямоугольной формы окна, такой как круг или эллипс, в c # или .net?
Я видел эти уникальные формы оконных окон, и они выглядели очень аккуратно в нескольких инсталляциях, которые я видел.

Кроме того, есть ли какой-либо недостаток в использовании такого дизайна для нестандартных форм, таких как устойчивость,вылетает и т.д.?

Ответы [ 5 ]

12 голосов
/ 27 марта 2011

Форма имеет свойство Region, и вы можете назначить любую форму, которую вы создадите. Например, чтобы создать овальную форму, вы можете использовать этот код в Form1_Load() методе формы:

 GraphicsPath path = new GraphicsPath();
 path.AddEllipse(0,0,this.Width,this.Height);
 Region region = new Region(path);
 this.Region = region;

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

4 голосов
/ 27 марта 2011

Я работал с чем-то в этом роде.Вы можете переопределить метод OnPaint.Примерно так:

protected override void OnPaint( System.Windows.Forms.PaintEventArgs e )
{
    GraphicsPath wantedshape = new GraphicsPath();
    wantedshape.AddEllipse(0, 0, this.Width, this.Height);
    this.Region = new Region(wantedshape);
}

И установите для свойства FormBorderStyle значение FormBorderStyle.None.

И нет риска использовать нестандартные формы.Просто создайте приложение, которое хотят ваши пользователи.:)

2 голосов
/ 26 марта 2011

Самый простой способ - создать окно без рамки и прозрачного фона и использовать изображение для определения фактической формы. Кроме того, вы можете создать окно с пользовательским Region, который определяет форму.

1 голос
/ 26 марта 2011

Используйте регион . Вы можете сделать любой элемент управления Windows Forms любой формы, установив его свойство Region. Область может быть прямоугольником, эллипсом, комбинацией нескольких фигур, и вы даже можете сгенерировать ее из растрового изображения.

0 голосов
/ 13 сентября 2017
 System.Drawing.Drawing2D.GraphicsPath objGP = new System.Drawing.Drawing2D.GraphicsPath();
        objGP.AddEllipse(new  Rectangle(0, 0, this.Width, this.Height));
        this.Region = new Region(objGP);

        System.Drawing.Graphics formGraphics = this.CreateGraphics();
        string drawString = DtDaysRemaining;
        System.Drawing.Font drawFont = new System.Drawing.Font("Arial", 20);
        System.Drawing.SolidBrush drawBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black);
        float x = 20;
        float y = 20;
        System.Drawing.StringFormat drawFormat = new System.Drawing.StringFormat();
        formGraphics.DrawString(drawString, drawFont, drawBrush, x, y, drawFormat);
        drawFont.Dispose();
        drawBrush.Dispose();
        formGraphics.Dispose();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...