Member 14923361 Ответов: 3

Мне нужна помощь, чтобы сделать Баттон один или два угловых круга.


Вот что у меня получилось, это делает всю пуговицу округлой. Я знаю, что я предполагают, чтобы изменить arcadd, чтобы addline, но параметры возвращает меня очень смущает. Я не могу понять, как нарисовать нормальные углы и оставить только, например, нижний правый угол закругленным или нижний правый и верхний правый.

GraphicsPath GetRoundPath(RectangleF Rect, int radius, float width=0)
       {
           //Fix radius to rect size
           radius = (int) Math.Max(( Math.Min(radius, Math.Min(Rect.Width, Rect.Height)) - width),1);
           float r2 = radius / 2f;
           float w2 = width / 2f;
           GraphicsPath GraphPath = new GraphicsPath();
           //Top-Left
          GraphPath.AddArc(Rect.X + w2, Rect.Y + w2, radius, radius, 180, 90);
           //Top-Right
           GraphPath.AddArc(Rect.X + Rect.Width - radius - w2, Rect.Y + w2, radius, radius, 270, 90);
           //Bottom-Right
           GraphPath.AddArc(Rect.X + Rect.Width - w2 - radius,
                              Rect.Y + Rect.Height - w2 - radius, radius, radius, 0, 90);
           //Bottom-Left
           GraphPath.AddArc(Rect.X + w2, Rect.Y - w2 + Rect.Height - radius, radius, radius, 90, 90);
           //Close line
           GraphPath.AddLine(Rect.X + w2, Rect.Y + Rect.Height - r2 - w2, Rect.X + w2, Rect.Y + r2 + w2);

           //GraphPath.CloseFigure();
           return GraphPath;
       }


Что я уже пробовал:

If you willing me to help me, please at least explain what i suppose to write in parameters or show me i know that wont help me much to learn, but then at least i can study more easily it. Sorry for dumb question, im trying to do this for a week now for my school assignment. 

3 Ответов

Рейтинг:
22

Sandeep Mewara

Я вижу вы выбрали код отсюда: Кнопка с закругленными краями C#[^]

Глядя на код, вы видите четкое разделение для каждого угла (4 угла кнопки) и то, как с ним обращаться. Если вы боретесь с удалением (не использованием) кода для какого-либо конкретного угла, то сначала вам нужно понять код, а затем скопировать его, чтобы использовать.

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


BillWoodruff

+5 Хороший улов

Рейтинг:
15

OriginalGriff

Если вы получаете код из статьи - на Codeproject или в другом месте - первое, что нужно сделать, это спросить автора: Кнопка с закругленными краями C#[^]
Если вы посмотрите, вы увидите форум внизу, где вы можете поговорить непосредственно с человеком, который написал статью, и он может ответить.

Но... если вы не понимаете, как изменить довольно простой код, то вы пробиваете намного выше своего веса - вам нужно понять, как он работает, прежде чем использовать его. Вы не сможете пройти весь свой курс или свою карьеру, просто найдя правильный код в интернете и запихнув его в свое приложение без изменений, вам придется писать свой собственный код и изменять другие. А это означает, что вы должны понимать код, прежде чем использовать его - что в любом случае чертовски хорошая идея, так как если вы этого не сделаете, вы понятия не имеете, что еще он делает!


Рейтинг:
12

Member 14923361

После некоторого изучения мне удалось сделать его для будущих пользователей.
Вот код для закругления только нижнего правого угла:

radius = (int)Math.Max((Math.Min(radius, Math.Min(Rect.Width, Rect.Height)) - width), 1);
           float r2 = radius / 2f;
           float w2 = width / 2f;
           GraphicsPath GraphPath = new GraphicsPath();



           GraphPath.AddLine(Rect.X + w2, Rect.Y + w2, Rect.X, Rect.Y);
           GraphPath.AddLine(Rect.X + Rect.Width, Rect.Y, Rect.X + Rect.Width - w2, Rect.Y);
           GraphPath.AddArc(Rect.X + Rect.Width - w2 - radius,
                              Rect.Y + Rect.Height - w2 - radius, radius, radius, 0, 90);
           GraphPath.AddLine(Rect.X + w2, Rect.Y - w2 + Rect.Height, Rect.X - w2, radius);

           GraphPath.AddLine(Rect.X + w2, Rect.Y + Rect.Height + r2 + w2 + Rect.Y, Rect.X + w2, Rect.Y + Rect.Y);

           return GraphPath;


верхний левый угол

GraphPath.AddLine(Rect.X + w2, Rect.Y + w2, Rect.X, Rect.Y);
GraphPath.AddArc(Rect.X + Rect.Width - radius - w2, Rect.Y + w2, radius, radius, 270, 90);
GraphPath.AddLine(Rect.X + Rect.Width-w2 ,Rect.Y + Rect.Height, Rect.X+Rect.Width,Rect.Y+Rect.Height-w2);
GraphPath.AddLine(Rect.X + w2, Rect.Y - w2 + Rect.Height, Rect.X - w2, radius);
GraphPath.AddLine(Rect.X + w2, Rect.Y + Rect.Height + r2 + w2 + Rect.Y, Rect.X + w2, Rect.Y + Rect.Y);  
return GraphPath;

Вверху Справа

GraphPath.AddArc(Rect.X + w2, Rect.Y + w2, radius, radius, 180, 90);
GraphPath.AddLine(Rect.X + Rect.Width, Rect.Y, Rect.X + Rect.Width - w2, Rect.Y);
GraphPath.AddLine(Rect.X + Rect.Width - w2, Rect.Y + Rect.Height, Rect.X + Rect.Width, Rect.Y + Rect.Height - w2);
GraphPath.AddLine(Rect.X + w2, Rect.Y - w2 + Rect.Height, Rect.X - w2, radius);
GraphPath.AddLine(Rect.X + w2, Rect.Y + Rect.Height - r2 - w2, Rect.X + w2, Rect.Y + r2 + w2);
return GraphPath;