>Всем привет!
Господа, поделитесь опытом создания форм с закругленными углами, если кто сталкивался. Я раньше решал такую проблему с помощью Win API. Не появилось ли в .NET Framework какого-то механизма, облегчающего решение данной проблемы?
В дополнение к ответу от shuklin, хотелось бы добавить, что в Как из Bitmap'a получить Region? показан один из способов получить Region из Bitmap, а Bitmap, в свою очередь, можно нарисовать в любом графическом редакторе.
>Привет!
Предложенный метод будет работать. Думаю, что использование this.Region является наиболее простым вариантом в данном случае. Только надо приведенный выше код поместить в отдельную функцию и вызвать ее в обработчике события Paint, а также при инициализации формы (иначе углы будут мигать
).
В 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);
}
}
}