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

نام تاپیک: ساخت لیست باکس سفارشی

  1. #1
    کاربر تازه وارد آواتار ehsan_starlight
    تاریخ عضویت
    مهر 1390
    محل زندگی
    اصفهان
    سن
    33
    پست
    86

    Smile ساخت لیست باکس سفارشی

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

    حتی اگر بشه همون لیست باکس ویندوزی رو سفارشی کرد بازم خوبه مثل ( تغییر شکل اسکرول ، تغییر سایز Sellection آیتم ها ، تغییر رنگ Sellection آیتم ها )

  2. #2
    کاربر دائمی آواتار Farshid007
    تاریخ عضویت
    بهمن 1389
    محل زندگی
    Karaj
    پست
    1,249

    نقل قول: ساخت لیست باکس سفارشی

    باید یه یوزر کنترل بسازی بعد اونو مشتق
    System.Windows.Forms.ListBox
    بعد اون من دیگه بلد نیستم

  3. #3
    کاربر تازه وارد آواتار ehsan_starlight
    تاریخ عضویت
    مهر 1390
    محل زندگی
    اصفهان
    سن
    33
    پست
    86

    نقل قول: ساخت لیست باکس سفارشی

    تا اینجارو که منم بلد بودم اما در هر صورت ممنون

  4. #4
    کاربر تازه وارد آواتار ehsan_starlight
    تاریخ عضویت
    مهر 1390
    محل زندگی
    اصفهان
    سن
    33
    پست
    86

    نقل قول: ساخت لیست باکس سفارشی

    یه نفر راهنمایی کنه لطفا

  5. #5

    نقل قول: ساخت لیست باکس سفارشی

    نقل قول نوشته شده توسط ehsan_starlight مشاهده تاپیک
    سلام دوستان میخواستم بدونم چطوری میشه یه لیست باکس بسازم
    منظورم اینه که نمیخوام از لیست باکس ارجینال ویندوزی استفاده کنم
    اگر دیده باشید بعضی از برنامه ها لیست باکشون رو خود برنامه نویس طراحی کرده

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

    یک فایل برای یک کلاس جدید بسازید، اینا رو اولش using کنید :

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing;
    using System.Drawing.Drawing2D;


    و این کلاس رو داخل ایجاد کنید :

    public class ListBoxPro : ListBox
    {
    private int hoveredIndex;

    public int HoveredIndex
    {
    get
    {
    return hoveredIndex;
    }
    }

    private string myName;

    public string MyName
    {
    get
    {
    return myName;
    }
    set
    {
    myName = value;
    }
    }

    public int SelectedItemIndex
    {
    get
    {
    return base.SelectedIndex;
    }
    set
    {
    base.SelectedIndex = value;
    }
    }

    public override DrawMode DrawMode
    {
    get
    {
    return base.DrawMode;
    }
    }

    public ListBoxPro()
    {
    hoveredIndex = -1;
    base.ItemHeight = 20;
    base.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
    base.MouseLeave += new EventHandler(ListBox_MouseLeave);
    base.MouseMove += new MouseEventHandler(ListBox_MouseMove);
    base.DrawItem += new DrawItemEventHandler(ListBox_DrawItem);
    }

    private void ListBox_MouseMove(object sender, MouseEventArgs e)
    {
    int newIndex = FindItemByPoint(e.Location);
    int prevIndex = hoveredIndex;
    if (newIndex != prevIndex)
    {
    hoveredIndex = newIndex;
    if (prevIndex > -1)
    {
    base.Invalidate(base.GetItemRectangle(prevIndex));
    }
    if (newIndex > -1)
    {
    base.Invalidate(base.GetItemRectangle(newIndex));
    }
    }
    }

    private void ListBox_MouseLeave(object sender, EventArgs e)
    {
    int prevIndex = hoveredIndex;
    if (prevIndex > -1)
    {
    hoveredIndex = -1;
    base.Invalidate(base.GetItemRectangle(prevIndex));
    }
    }

    private int FindItemByPoint(Point location)
    {
    if (base.Items.Count == 0)
    {
    return -1;
    }
    Rectangle itemBounds = base.GetItemRectangle(0);
    if ((itemBounds.Left > location.X) || (itemBounds.Right <= location.X))
    {
    return -1;
    }
    int first = 0;
    int last = base.Items.Count - 1;
    while (first <= last)
    {
    int index = (first + last) / 2;
    itemBounds = base.GetItemRectangle(index);
    if (itemBounds.Top <= location.Y)
    {
    if (itemBounds.Bottom > location.Y)
    {
    return index;
    }
    else
    {
    first = index + 1;
    }
    }
    else
    {
    last = index - 1;
    }
    }
    return -1;
    }

    private void ListBox_DrawItem(object sender, DrawItemEventArgs e)
    {
    BufferedGraphicsContext bufferedContext = BufferedGraphicsManager.Current;
    BufferedGraphics buffer = bufferedContext.Allocate(e.Graphics, e.Bounds);
    Graphics graphics = buffer.Graphics;
    Rectangle frameBounds = new Rectangle
    (
    e.Bounds.X,
    e.Bounds.Y,
    e.Bounds.Width - 1,
    e.Bounds.Height - 2
    );
    Rectangle fillBounds = new Rectangle
    (
    e.Bounds.X + 1,
    e.Bounds.Y + 1,
    e.Bounds.Width - 2,
    e.Bounds.Height - 3
    );
    Rectangle textBounds = new Rectangle
    (
    e.Bounds.X + 2,
    e.Bounds.Y + 2,
    e.Bounds.Width - 4,
    e.Bounds.Height - 3
    );
    Brush backBrush = new SolidBrush(base.BackColor);
    graphics.FillRectangle(backBrush, e.Bounds);
    if ((e.Index > -1) && (e.Index < base.Items.Count))
    {
    if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
    {
    Color c1 = GetColor(SystemColors.Highlight, 64);
    Color c2 = GetColor(SystemColors.Highlight, 0);
    Color c3 = GetColor(SystemColors.Highlight, -32);
    LinearGradientBrush faceBrush = new LinearGradientBrush(fillBounds, c1, c2, 90);
    graphics.FillRectangle(faceBrush, fillBounds);
    Pen framePen = new Pen(c3);
    graphics.DrawRectangle(framePen, frameBounds);
    }
    else if (e.Index == hoveredIndex)
    {
    Color c1 = GetColor(SystemColors.Highlight, 128);
    Color c2 = GetColor(SystemColors.Highlight, 64);
    Color c3 = GetColor(SystemColors.Highlight, 32);
    LinearGradientBrush faceBrush = new LinearGradientBrush(fillBounds, c1, c2, 90);
    graphics.FillRectangle(faceBrush, fillBounds);
    Pen framePen = new Pen(c3);
    graphics.DrawRectangle(framePen, frameBounds);
    }
    string text = base.Items[e.Index].ToString();
    StringFormat textFormat = new StringFormat();
    if (base.RightToLeft == System.Windows.Forms.RightToLeft.Yes)
    {
    textFormat.FormatFlags = StringFormatFlags.DirectionRightToLeft;
    }
    textFormat.LineAlignment = StringAlignment.Center;
    Brush textBrush = new SolidBrush(e.ForeColor);
    graphics.DrawString(text, e.Font, textBrush, textBounds, textFormat);
    }
    buffer.Render(e.Graphics);
    }

    private int LimitByte(int value)
    {
    if (value < byte.MinValue)
    {
    return byte.MinValue;
    }
    if (value > byte.MaxValue)
    {
    return byte.MaxValue;
    }
    return value;
    }

    private Color GetColor(Color baseColor, int brightness)
    {
    int red = LimitByte(baseColor.R + brightness);
    int green = LimitByte(baseColor.G + brightness);
    int blue = LimitByte(baseColor.B + brightness);
    return Color.FromArgb(red, green, blue);
    }
    }


    یکبار که کد رو کامپایل کنید در Toolbox ویژوال استدیو بالا یک کنترل ListBoxPro اضافه شده که می توانید در فرم تان بکار ببرید، این لیست باکس
    بر خلاف لیست باکس استاندارد Hover رو نشون میده و رنگ اش هم متفاوته.

  6. #6
    کاربر دائمی آواتار daneshjo90
    تاریخ عضویت
    تیر 1390
    محل زندگی
    چايپاره
    پست
    282

    نقل قول: ساخت لیست باکس سفارشی

    the king عزيز

    از زحمتي كه كشيدي ممنون ولي بعد از اينكه پروژه رو كامپايل هم كردم همچين چيزي كه شما گفتي مشاهده نكردم ميشه كمك كني ؟

    موفق باشي

  7. #7

    نقل قول: ساخت لیست باکس سفارشی

    نقل قول نوشته شده توسط daneshjo90 مشاهده تاپیک
    the king عزيز

    از زحمتي كه كشيدي ممنون ولي بعد از اينكه پروژه رو كامپايل هم كردم همچين چيزي كه شما گفتي مشاهده نكردم ميشه كمك كني ؟

    موفق باشي
    مثال پیوستی رو ببینید :
    ListBoxProSample.zip

  8. #8
    کاربر دائمی آواتار daneshjo90
    تاریخ عضویت
    تیر 1390
    محل زندگی
    چايپاره
    پست
    282

    نقل قول: ساخت لیست باکس سفارشی

    ممنون از لطفت ولي همچنان من ابزاري با اسم نامبرده در تولباكس مشاهده نميكنم

  9. #9

    نقل قول: ساخت لیست باکس سفارشی

    نقل قول نوشته شده توسط daneshjo90 مشاهده تاپیک
    ممنون از لطفت ولي همچنان من ابزاري با اسم نامبرده در تولباكس مشاهده نميكنم
    شما توی Toolbox علاوه بر تب های استاندارد Common Controls و All Windows Forms و ... یک تب ای با عنوان ListBoxProSample Components نمی بینید
    که داخلش یک Pointer و یک ListBoxPro باشه؟ اول روی Toolbox راست کلیک کرده و Reset Toolbox رو انتخاب کنید.
    بعد در منوی Build از گزینه Clean Solution و Rebuild Solution استفاده کنید تا دوبار Toolbox پر بشه.

  10. #10
    کاربر دائمی آواتار daneshjo90
    تاریخ عضویت
    تیر 1390
    محل زندگی
    چايپاره
    پست
    282

    نقل قول: ساخت لیست باکس سفارشی

    مثل اينكه بايد بيخيالش بشم
    هر كاري كردم نشد

    ممنون
    شرمنده كه وقتتونو گرفتم

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

  1. سوال: مشکل با ساخت لیست باکس به وسیله کلاسها
    نوشته شده توسط oliya24 در بخش VB.NET
    پاسخ: 5
    آخرین پست: چهارشنبه 02 آذر 1390, 14:39 عصر
  2. ساخت لیست باکس از روی یک ستون خاص AdoQuery
    نوشته شده توسط rk1983xx در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 7
    آخرین پست: چهارشنبه 17 فروردین 1390, 16:04 عصر
  3. سوال: لیست باکس سفارشی
    نوشته شده توسط awwex2007 در بخش ASP.NET Web Forms
    پاسخ: 0
    آخرین پست: یک شنبه 24 بهمن 1389, 13:38 عصر
  4. ساخت لیست کشویی سفارشی
    نوشته شده توسط Reza1607 در بخش طراحی وب (Web Design)
    پاسخ: 5
    آخرین پست: سه شنبه 05 مرداد 1389, 12:10 عصر
  5. ساخت لیست باکس پویا
    نوشته شده توسط Hamid_PaK در بخش برنامه نویسی در Delphi
    پاسخ: 10
    آخرین پست: چهارشنبه 15 تیر 1384, 10:03 صبح

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

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