dev.net.ua

Українська Спільнота Розробникiв
 
Ласкаво просимо до dev.net.ua Увійти | Приєднатися | Допомога | Увійти Live ID
в Пошук

Как в .NET сделать форму без углов?

Останнє повідомлення 20-11-2006, 12:35 від SergeyP. 3 відповіді.
Сортувати: Попереднє Наступне
  •  20-11-2006, 2:38 796

    Как в .NET сделать форму без углов?

    Всем привет!

    Господа, поделитесь опытом создания форм с закругленными углами, если кто сталкивался. Я раньше решал такую проблему с помощью Win API. Не появилось ли в .NET Framework какого-то механизма, облегчающего решение данной проблемы?


    Михаил
  •  20-11-2006, 3:09 797 у відповідь на 796

    Re: Как в .NET сделать форму без углов?

    Привет!

    Например так:

    private void button1_Click(object sender, EventArgs e)

    {

    System.Drawing.Drawing2D.GraphicsPath p = new System.Drawing.Drawing2D.GraphicsPath();

    p.AddEllipse(new Rectangle(new Point(0,0), this.Size));

    System.Drawing.Region r = new Region(p);

    this.Region = r;

    }

  •  20-11-2006, 4:19 803 у відповідь на 797

    Re: Как в .NET сделать форму без углов?

    Привет!

    Предложенный метод будет работать. Думаю, что использование this.Region является наиболее простым вариантом в данном случае. Только надо приведенный выше код поместить в отдельную функцию и вызвать ее в обработчике события Paint, а также при инициализации формы (иначе углы будут мигать Smile).

    З повагою,
    Сергій
  •  20-11-2006, 12:35 820 у відповідь на 803

    Re: Как в .NET сделать форму без углов?

    >Всем привет!

    Господа, поделитесь опытом создания форм с закругленными углами, если кто сталкивался. Я раньше решал такую проблему с помощью Win API. Не появилось ли в .NET Framework какого-то механизма, облегчающего решение данной проблемы?

    В дополнение к ответу от shuklin, хотелось бы добавить, что в Как из Bitmap'a получить Region? показан один из способов получить Region из Bitmap, а Bitmap, в свою очередь, можно нарисовать в любом графическом редакторе.

    >Привет!

    Предложенный метод будет работать. Думаю, что использование this.Region является наиболее простым вариантом в данном случае. Только надо приведенный выше код поместить в отдельную функцию и вызвать ее в обработчике события Paint, а также при инициализации формы (иначе углы будут мигать Smile).

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

    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Windows.Forms;

    class DemoForm : Form
    {
        static void Main()
        {
            Application.Run(new DemoForm());
        }

        public DemoForm()
        {
            RecreateCustomRegion();
        }

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

        void RecreateCustomRegion()
        {
            using (GraphicsPath path = new GraphicsPath())
            {
                path.AddEllipse(new Rectangle(new Point(0, 0), Size));
                Region = new Region(path);
            }
        }
    }

Переглядати як новосний Блог RSS в XML