نقل قول: مشکل درايجاد دکمه گرد
سلام
من برای دکمه های گرد
یک عکس گرد (یا هر شکل دیگری)
در فتوشاپ با فرمت png می سازم
و در برنامه استفاده می کنم به نظرم خیلی بهتر از این روش است
نقل قول: مشکل درايجاد دکمه گرد
میتونید رنگ زمینه، بوردر و متن رو توسط متدهای مناسب از شئ گرافیک خودتون رسم کنید و در اینصورت به خط base.OnPaint(e); نیاز نیست.
نقل قول: مشکل درايجاد دکمه گرد
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
میتونید رنگ زمینه، بوردر و متن رو توسط متدهای مناسب از شئ گرافیک خودتون رسم کنید و در اینصورت به خط base.OnPaint(e); نیاز نیست.
ممنون
متاسفانه نتونستم
من میخوام هم کادر(بوردر) داشته باشه که البته کادرش مثل موقعی باشه که دکمه معمولی هستش یعنی صاف باشه و بدون هیچ زدگیه
هم بدون بوردر رسم کنم
میشه راهنمایی کنید
از دیروز درگیر این موضوع هستم
نقل قول: مشکل درايجاد دکمه گرد
می تونید در ابتدا یک Rectangle تعریف کنید و مقدارش هممون ClientSize باشه و بعد از اون در یک مستطیل جدید بصورت (newRectangle.Inflate(-3, -3 ابعاد مستطیل مورد نظر که قرار دایره درونش رسم بشه را بزرگتر و یا کوچکتر کنی. درضمن میتونی مقادیر افزایش و یا کاهش را بصورت یک Property در اختیار EndUser قرار بدی.
نقل قول: مشکل درايجاد دکمه گرد
نقل قول: مشکل درايجاد دکمه گرد
ابتدا یک UserControl اضافه کنید.
در بخش Designer و در بالای کدها عبارت زیر را جایگزین کنید:
Inherits System.Windows.Forms.Button
در رویداد Resize کنترل کد زیر را بنویسید تا هر زمان که کاربر اندازه دکمه را خواست تغییر بدهد نسبت Width و Height کنترل ثابت بمونه تا دایره به شکل بیضی نشه:
Me.Height = Me.Width
در رویداد Paint کنترل کدهای زیر را بنویسید:
System.Drawing.Drawing2D.GraphicsPath buttonPath = new System.Drawing.Drawing2D.GraphicsPath();
Set a new rectangle to the same size as the button's //
ClientRectangle property. //
Rectangle newRectangle = this.ClientRectangle;
Decrease the size of the rectangle.//
newRectangle.Inflate(2, 2)//
Increase the size of the rectangle to include the border.//
newRectangle.Inflate(-3, -3);
Create a circle within the new rectangle.//
buttonPath.AddEllipse(newRectangle);
Set the button's Region property to the newly created //
circle region.//
this.Region = new System.Drawing.Region(buttonPath);
حالا بعد از Build کردن پروژه میتونی از این کنترل استفاده کنید.
نقل قول: مشکل درايجاد دکمه گرد
ممنون
ولی متوجه نشدم
;Inherits System.Windows.Forms.Button را کجا وارد کنم؟
با کد خودم راحت تر نیست؟
نقل قول: مشکل درايجاد دکمه گرد
راه حلی که گفتم ایجاد یک کنترل هستش که میتونید به دفعات و بدون کد نویسی اضافه، در برنامه استفاده کنید. روش شما اگر که بخواهید از دکمه های گرد به تعداد زیاد در برنامه استفاده کنید خیلی کار جالبی نیست (البته به نظر من). یک نمونه برات آماده می کنم...
5 ضمیمه
نقل قول: مشکل درايجاد دکمه گرد
ابتدا یک پروژه C# ایجاد کن و بعد روی دکمه نشان داده شده در تصویر زیر کلیک کن تا تمام جزئیات Solution رو ببینی
ضمیمه 144978
به پروژه خودت مطابق تصویر زیر یک User Control اضافه کن تا کنترل سفارشی برای خودت درست کنی
ضمیمه 144979
مطابق تصویر زیر روی Designer کلیک کن و پس از مشاهده کدهای موجود در این بخش، عبارت نشان داده شده در کادر قرمز رنگ رو اضافه کن
ضمیمه 144980
سپس مطابق تصویر زیر روی بخش نشان داده شده کلیک کن و کدهای نشان داده شده درکادر قرمز (در پست بالا نوشتم) رو اضافه کن
ضمیمه 144981
حالا مطابق تصویر زیر در بخش Solution روی پروژه راست کلیک کن و پس از Built کردن پروژه، دکمه سفارشی شما همانند تصویر در سمت چپ و در ToolBox اضافه شده است. بکشید و روی فرم رها کنید و مانند یک دکمه ازش استفاده کنید
ضمیمه 144982
درست شد؟
نقل قول: مشکل درايجاد دکمه گرد
ساختم و ساخته شد
ولی بازم همون مشکل موجود بودن بوردر در بالا و راست اینجا هم هست
ولی انگار مال شما نداره
مشکل کجاست؟
نقل قول: مشکل درايجاد دکمه گرد
فایلی رو که کار کردی زیپ کن برام بفرست
1 ضمیمه
نقل قول: مشکل درايجاد دکمه گرد
اینم سورس
خواهشا کمک کنید
خیلی کارم گیر کرده
نقل قول: مشکل درايجاد دکمه گرد
مشکل کارت در استفاده از دستور newRectangle.Inflate است. شما دوبار در برنامه ای که ساختی استفاده کردی بار اول اعداد داخلش 2 (مثبت = افزایش) هستش و خط بعدی -3 (منفی = کاهش). اما میزان کاهش کم هستش
نمونه کدهای من در بالا فقط -2 داشت. شما باید از یک عدد منفی استفاده کنید تا مرز دایر از محیط دکمه کمی کوچکتر بشه. پس تنها یکبار از newRectangle.Inflate و با مقدار منفی استفاده کن و نتیجه را بگو
1 ضمیمه
نقل قول: مشکل درايجاد دکمه گرد
نتیجه اصلاح فایل خودتون
ضمیمه 144997
نقل قول: مشکل درايجاد دکمه گرد
ممنون
شد
حالا ی سوال
چطور میتونیم از حالت فلت درش بیاریم؟
یعنی یکم دکمه برجسته بشه و از از حالت لیبل بودن خارج بشه
1 ضمیمه
نقل قول: مشکل درايجاد دکمه گرد
واسه این کار میتونی با استفاده از مباحث گرافیک در دات نت زمینه های متفاوت که به ظاهر برجسته دیده میشند را برای خودت ایجاد کنی و یا یک تصویر رو در ناحیه دایره ای شکل که بوجود آوردی رسم کنی و البته میتونی انتخاب تصور رو بصورت یک Property در کنترلی که درست کردی قرار بدی تا براحتی در زمان کار با این دکمه یک تصویر دلخواه برای خودت انتخاب کنی.
البته اگر دنبال دردسر کمتر می گردی میتونی به کدهای بالا در رویداد OnPaint یک دایره رسم کنی که اطراف دکمه یک خط وجود داشته باشه مثل تصویر زیر : (پیشنهاد میکنم تمام مواردی که به دکمه داری اضافه میکنی رو بصورت Property در اختیار End User قرار بده)
ضمیمه 144999
نقل قول: مشکل درايجاد دکمه گرد
البته اگر کمی حوصله کنی میتونی برای حالت های MouseOver, MouseClick و حالت نرمال دکمه یک رنگ در نظر بگیری
نقل قول: مشکل درايجاد دکمه گرد
ممنون
اگر وقت دارید میشه کدشو بنویسید؟
چون من زیاد با موارد گرافیکی اشنا نیستم
اگر هم که نه
ممنون از راهنمایی هایی که انجام دادید
نقل قول: مشکل درايجاد دکمه گرد
برای دایره اطراف دکمه یکی دو روز دیگه میتونم کاری کنم ولی بحث کار با رنگ ها و گرادیان های رنگ به لحاظ اینکه خیلی سلیقه ای هستش باید خودتون زحمت بکشید. البته کدهای آماده زیادی میتونید در اینترنت پیدا کنید...
نقل قول: مشکل درايجاد دکمه گرد
سلام
برای خط دور دکمه تونستید کاری کنید؟
نقل قول: مشکل درايجاد دکمه گرد
نمونه زیر رو ببینید.
برای border یک دایره معمولی باید رسم کنید البته در هر رویداد میتونید رنگ و اندازه رو تغییر بدید.
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using System.Windows.Forms;
public class RoundedButton : Button
{
enum ButtonState
{
Normal,
MouseEnter,
GotFocus,
Pushed
}
private ButtonState _state;
private ushort _borderWidth;
private Color _backColorMouseEnterState;
private Color _borderColorNormalState;
private Color _borderColorGotFocusState;
private Color _backColorDisableState;
private Color _backColorPushedState;
public sealed override Color BackColor
{
get { return base.BackColor; }
set { base.BackColor = value; }
}
public Color BackColorMouseEnterState
{
get { return _backColorMouseEnterState; }
set { _backColorMouseEnterState = value; }
}
public Color BorderColorNormalState
{
get { return _borderColorNormalState; }
set
{
if (_borderColorNormalState != value)
{
_borderColorNormalState = value;
Invalidate();
}
}
}
public Color BorderColorGotFocusState
{
get { return _borderColorGotFocusState; }
set { _borderColorGotFocusState = value; }
}
public Color BackColorDisableState
{
get { return _backColorDisableState; }
set { _backColorDisableState = value; }
}
public Color BackColorPushedState
{
get { return _backColorPushedState; }
set { _backColorPushedState = value; }
}
public ushort BorderWidth
{
get { return _borderWidth; }
set
{
if (_borderWidth != value)
{
_borderWidth = value;
Invalidate();
}
}
}
public RoundedButton()
{
BackColor = Color.FromArgb(125, 192, 255);
BackColorMouseEnterState = Color.FromArgb(180, 219, 255);
BackColorPushedState = Color.FromArgb(64, 162, 255);
BackColorDisableState = Color.FromArgb(214, 214, 214);
BorderWidth = 5;
BorderColorNormalState = Color.FromArgb(47, 154, 255);
BorderColorGotFocusState = Color.FromArgb(0, 121, 235);
}
protected override void OnGotFocus(EventArgs e)
{
_state = ButtonState.GotFocus;
base.OnGotFocus(e);
}
protected override void OnLostFocus(EventArgs e)
{
_state = ButtonState.Normal;
base.OnLostFocus(e);
}
protected override void OnMouseEnter(EventArgs e)
{
_state = ButtonState.MouseEnter;
base.OnMouseEnter(e);
}
protected override void OnMouseLeave(EventArgs e)
{
_state = ButtonState.Normal;
base.OnMouseLeave(e);
}
protected override void OnMouseDown(MouseEventArgs mevent)
{
if (mevent.Button == MouseButtons.Left)
{
_state = ButtonState.Pushed;
}
base.OnMouseDown(mevent);
}
protected override void OnMouseUp(MouseEventArgs mevent)
{
if (mevent.Button == MouseButtons.Left)
{
_state = ButtonState.MouseEnter;
}
base.OnMouseUp(mevent);
}
protected override void OnKeyDown(KeyEventArgs kevent)
{
if (kevent.KeyCode == Keys.Space)
{
_state = ButtonState.Pushed;
}
base.OnKeyDown(kevent);
}
protected override void OnKeyUp(KeyEventArgs kevent)
{
if (kevent.KeyCode == Keys.Space)
{
_state = ButtonState.GotFocus;
}
base.OnKeyUp(kevent);
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
e.Graphics.InterpolationMode = InterpolationMode.High;
e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
e.Graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit;
using (GraphicsPath path = new GraphicsPath())
{
path.AddEllipse(0, 0, Width, Height);
DrawBackground(e.Graphics, path);
DrawBorder(e.Graphics, path);
DrawText(e.Graphics);
}
}
private void DrawText(Graphics g)
{
using (StringFormat stringFormat = new StringFormat())
{
stringFormat.Alignment = StringAlignment.Center;
stringFormat.LineAlignment = StringAlignment.Center;
g.DrawString(Text, Font, new SolidBrush(ForeColor), this.ClientRectangle , stringFormat);
}
}
private void DrawBorder(Graphics g, GraphicsPath path)
{
using (Pen pen = _state == ButtonState.GotFocus ? new Pen(BorderColorGotFocusState, BorderWidth) : new Pen(BorderColorNormalState, BorderWidth))
{
g.DrawPath(pen, path);
}
}
private void DrawBackground(Graphics g, GraphicsPath path)
{
Region = new Region(path);
Color backColorToDraw =
_state == ButtonState.MouseEnter
? BackColorMouseEnterState
: (Enabled
? BackColor
: BackColorDisableState);
g.FillRegion(new SolidBrush(backColorToDraw), Region);
}
}