نمایش نتایج 1 تا 22 از 22

نام تاپیک: مشکل در ايجاد دکمه گرد

  1. #1

    مشکل در ايجاد دکمه گرد

    سلام
    من ميخوام دکمه هاي خودم را گرد کنم
    از کد زير استفاده ميکنم و به خوبي گرد ميشه

        class RoundButton : Button
    {
    protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
    {
    GraphicsPath grPath = new GraphicsPath();
    grPath.AddEllipse(0, 0, ClientSize.Width, ClientSize.Height);
    this.Region = new System.Drawing.Region(grPath);
    base.OnPaint(e);

    }
    }


    حالا دوتا مشکل دارم

    اینکه ی حالت میخوام کادر سرتاسر باشه (یعنی بهش border بدم)
    ی حالت هم این چهار تا خط نمایش داده نشه

    Capture.JPG
    آخرین ویرایش به وسیله negar.rafie : یک شنبه 27 فروردین 1396 در 15:17 عصر

  2. #2
    کاربر دائمی آواتار windowsyar
    تاریخ عضویت
    مرداد 1395
    محل زندگی
    مشهد الرضا
    پست
    208

    نقل قول: مشکل درايجاد دکمه گرد

    سلام
    من برای دکمه های گرد
    یک عکس گرد (یا هر شکل دیگری)
    در فتوشاپ با فرمت png می سازم
    و در برنامه استفاده می کنم به نظرم خیلی بهتر از این روش است

  3. #3

    نقل قول: مشکل درايجاد دکمه گرد

    میتونید رنگ زمینه، بوردر و متن رو توسط متدهای مناسب از شئ گرافیک خودتون رسم کنید و در اینصورت به خط base.OnPaint(e); نیاز نیست.

  4. #4

    نقل قول: مشکل درايجاد دکمه گرد

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    میتونید رنگ زمینه، بوردر و متن رو توسط متدهای مناسب از شئ گرافیک خودتون رسم کنید و در اینصورت به خط base.OnPaint(e); نیاز نیست.
    ممنون
    متاسفانه نتونستم
    من میخوام هم کادر(بوردر) داشته باشه که البته کادرش مثل موقعی باشه که دکمه معمولی هستش یعنی صاف باشه و بدون هیچ زدگیه
    هم بدون بوردر رسم کنم
    میشه راهنمایی کنید
    از دیروز درگیر این موضوع هستم
    آخرین ویرایش به وسیله negar.rafie : دوشنبه 28 فروردین 1396 در 03:08 صبح

  5. #5
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,172

    نقل قول: مشکل درايجاد دکمه گرد

    می تونید در ابتدا یک Rectangle تعریف کنید و مقدارش هممون ClientSize باشه و بعد از اون در یک مستطیل جدید بصورت (newRectangle.Inflate(-3, -3 ابعاد مستطیل مورد نظر که قرار دایره درونش رسم بشه را بزرگتر و یا کوچکتر کنی. درضمن میتونی مقادیر افزایش و یا کاهش را بصورت یک Property در اختیار EndUser قرار بدی.

  6. #6

    نقل قول: مشکل درايجاد دکمه گرد

    ممنون
    ولی نتونستم بنویسم

  7. #7
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,172

    نقل قول: مشکل درايجاد دکمه گرد

    ابتدا یک 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 کردن پروژه میتونی از این کنترل استفاده کنید.
    آخرین ویرایش به وسیله Mahmoud.Afrad : سه شنبه 29 فروردین 1396 در 20:16 عصر

  8. #8

    نقل قول: مشکل درايجاد دکمه گرد

    ممنون
    ولی متوجه نشدم
    ;Inherits System.Windows.Forms.Button را کجا وارد کنم؟

    با کد خودم راحت تر نیست؟


  9. #9
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,172

    نقل قول: مشکل درايجاد دکمه گرد

    راه حلی که گفتم ایجاد یک کنترل هستش که میتونید به دفعات و بدون کد نویسی اضافه، در برنامه استفاده کنید. روش شما اگر که بخواهید از دکمه های گرد به تعداد زیاد در برنامه استفاده کنید خیلی کار جالبی نیست (البته به نظر من). یک نمونه برات آماده می کنم...

  10. #10
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,172

    نقل قول: مشکل درايجاد دکمه گرد

    ابتدا یک پروژه C#‎ ایجاد کن و بعد روی دکمه نشان داده شده در تصویر زیر کلیک کن تا تمام جزئیات Solution رو ببینی

    001.png

    به پروژه خودت مطابق تصویر زیر یک User Control اضافه کن تا کنترل سفارشی برای خودت درست کنی

    002.png

    مطابق تصویر زیر روی Designer کلیک کن و پس از مشاهده کدهای موجود در این بخش، عبارت نشان داده شده در کادر قرمز رنگ رو اضافه کن

    003.png

    سپس مطابق تصویر زیر روی بخش نشان داده شده کلیک کن و کدهای نشان داده شده درکادر قرمز (در پست بالا نوشتم) رو اضافه کن

    004.jpg

    حالا مطابق تصویر زیر در بخش Solution روی پروژه راست کلیک کن و پس از Built کردن پروژه، دکمه سفارشی شما همانند تصویر در سمت چپ و در ToolBox اضافه شده است. بکشید و روی فرم رها کنید و مانند یک دکمه ازش استفاده کنید

    005.png

    درست شد؟

  11. #11

    نقل قول: مشکل درايجاد دکمه گرد

    ساختم و ساخته شد
    ولی بازم همون مشکل موجود بودن بوردر در بالا و راست اینجا هم هست
    ولی انگار مال شما نداره
    مشکل کجاست؟

  12. #12
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,172

    نقل قول: مشکل درايجاد دکمه گرد

    فایلی رو که کار کردی زیپ کن برام بفرست

  13. #13

    نقل قول: مشکل درايجاد دکمه گرد

    اینم سورس
    خواهشا کمک کنید
    خیلی کارم گیر کرده
    فایل های ضمیمه فایل های ضمیمه

  14. #14
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,172

    نقل قول: مشکل درايجاد دکمه گرد

    مشکل کارت در استفاده از دستور newRectangle.Inflate است. شما دوبار در برنامه ای که ساختی استفاده کردی بار اول اعداد داخلش 2 (مثبت = افزایش) هستش و خط بعدی -3 (منفی = کاهش). اما میزان کاهش کم هستش

    نمونه کدهای من در بالا فقط -2 داشت. شما باید از یک عدد منفی استفاده کنید تا مرز دایر از محیط دکمه کمی کوچکتر بشه. پس تنها یکبار از newRectangle.Inflate و با مقدار منفی استفاده کن و نتیجه را بگو

  15. #15
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,172

    نقل قول: مشکل درايجاد دکمه گرد

    نتیجه اصلاح فایل خودتون

    006.png

  16. #16

    نقل قول: مشکل درايجاد دکمه گرد

    ممنون
    شد
    حالا ی سوال
    چطور میتونیم از حالت فلت درش بیاریم؟
    یعنی یکم دکمه برجسته بشه و از از حالت لیبل بودن خارج بشه

  17. #17
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,172

    نقل قول: مشکل درايجاد دکمه گرد

    واسه این کار میتونی با استفاده از مباحث گرافیک در دات نت زمینه های متفاوت که به ظاهر برجسته دیده میشند را برای خودت ایجاد کنی و یا یک تصویر رو در ناحیه دایره ای شکل که بوجود آوردی رسم کنی و البته میتونی انتخاب تصور رو بصورت یک Property در کنترلی که درست کردی قرار بدی تا براحتی در زمان کار با این دکمه یک تصویر دلخواه برای خودت انتخاب کنی.

    البته اگر دنبال دردسر کمتر می گردی میتونی به کدهای بالا در رویداد OnPaint یک دایره رسم کنی که اطراف دکمه یک خط وجود داشته باشه مثل تصویر زیر : (پیشنهاد میکنم تمام مواردی که به دکمه داری اضافه میکنی رو بصورت Property در اختیار End User قرار بده)

    007.png

  18. #18
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,172

    نقل قول: مشکل درايجاد دکمه گرد

    البته اگر کمی حوصله کنی میتونی برای حالت های MouseOver, MouseClick و حالت نرمال دکمه یک رنگ در نظر بگیری

  19. #19

    نقل قول: مشکل درايجاد دکمه گرد

    ممنون
    اگر وقت دارید میشه کدشو بنویسید؟
    چون من زیاد با موارد گرافیکی اشنا نیستم
    اگر هم که نه
    ممنون از راهنمایی هایی که انجام دادید

  20. #20
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,172

    نقل قول: مشکل درايجاد دکمه گرد

    برای دایره اطراف دکمه یکی دو روز دیگه میتونم کاری کنم ولی بحث کار با رنگ ها و گرادیان های رنگ به لحاظ اینکه خیلی سلیقه ای هستش باید خودتون زحمت بکشید. البته کدهای آماده زیادی میتونید در اینترنت پیدا کنید...

  21. #21

    نقل قول: مشکل درايجاد دکمه گرد

    سلام
    برای خط دور دکمه تونستید کاری کنید؟

  22. #22

    نقل قول: مشکل درايجاد دکمه گرد

    نمونه زیر رو ببینید.
    برای 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);
    }
    }

تاپیک های مشابه

  1. مشکل در ایجاد دکمه در اکسس 2013
    نوشته شده توسط rezavv2006 در بخش Access
    پاسخ: 11
    آخرین پست: شنبه 14 مرداد 1396, 12:16 عصر
  2. مشکل در ایجاد دکمه در AlertDialog
    نوشته شده توسط Amin_Senator در بخش Android Studio
    پاسخ: 0
    آخرین پست: دوشنبه 14 تیر 1395, 19:13 عصر
  3. مشکل در ایجاد کاربر
    نوشته شده توسط Developer Programmer در بخش SQL Server
    پاسخ: 1
    آخرین پست: پنج شنبه 03 دی 1383, 23:56 عصر
  4. مشکل در ایجاد setup
    نوشته شده توسط kati در بخش برنامه نویسی در 6 VB
    پاسخ: 9
    آخرین پست: دوشنبه 23 شهریور 1383, 16:27 عصر
  5. مشکل در ایجاد کنترل و چاپ گرفتن از آن
    نوشته شده توسط (سیدشریفی) در بخش VB.NET
    پاسخ: 6
    آخرین پست: سه شنبه 04 شهریور 1382, 08:51 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •