PDA

View Full Version : سوال: ایجاد کنترل Progressbar شخصی از ابتدا



MehdiElexal
چهارشنبه 08 مرداد 1393, 12:48 عصر
با سلام خدمت دوستان
من یه گراف میله ای دارم میخوام داخل تب 2 از تب کنترلم بیوفته
اما الان فقط روی فرمم میوفته
هرکاری کردم نشد داخل تب 2 تب کنترل بندازم
لطفا راهنمایی بفرمائید
با تشکر

if (i % 2 == 0) value++;
//lblvalue.Text = "Value is: " + value.ToString() + "%";

Graphics graph = Graphics.FromHwnd(this.Handle);
System.Drawing.Drawing2D.LinearGradientBrush gradien = new System.Drawing.Drawing2D.LinearGradientBrush(new Point(5, 5), new Point(10, 10), Color.DodgerBlue, Color.DodgerBlue);
//graph.Clear(Color.White);
i += 1;
Rectangle rec = new Rectangle(309, 309, 200, 11);
graph.DrawRectangle(Pens.LightSlateGray, rec);

MehdiElexal
چهارشنبه 08 مرداد 1393, 17:45 عصر
به جای this.handle چه خصوصیت tabcontrol رو قرار بدم که handle شه ؟

MehdiElexal
چهارشنبه 08 مرداد 1393, 17:57 عصر
پیدا کردم tabpage1

MehdiElexal
چهارشنبه 08 مرداد 1393, 19:51 عصر
دوستان جلوتر گیر کردم باز :گریه:

Graphics graph = Graphics.FromHwnd(this.Handle);
System.Drawing.Drawing2D.LinearGradientBrush gradien = new System.Drawing.Drawing2D.LinearGradientBrush(new Point(5, 5), new Point(10, 10), Color.Yellow, Color.Yellow);
//graph.Clear(Color.Red);
//i+=1;
Rectangle rec=new Rectangle(20,20,200,20);
graph.DrawRectangle(Pens.Black, rec);
graph.FillRectangle(gradien, 21, 21, i, 19);

الان گراف رو رسم میکنم
مثلا میدم به طول 200 میره تا 200 اما میگم حالا الان 20 نمیشه دیگه
میشه ها اما چون تا 20 رفته یه بار رنگی کرده حالا رو 20 وای میسته معلوم نمیشه چون تا 200 رنگ داشته
لطفا کمک کنید گیرم
نوار جلو میره اما برای بازگشت به عقب رفرش لازم داره تا رنگ قبلی پاک شه و عدد پایین تر بتونه خودش رو نشون بده الان میره زیر رنگ بزرگتر !!!
منتها رفرش نمیخوام هی بدم چون دارم استفاده پروگرس میکنم ازش نمیشه سر هر عدد رفرش داد
ممنون میشم یه راه حلی بگید رو این سورس
منظورمم از 20 200 و این اعداد طول گراف هست یا همون value برای progress بار
با تشکر

Mahmoud.Afrad
چهارشنبه 08 مرداد 1393, 21:17 عصر
باید در رویداد Paint این کار رو انجام بدی. در اینصورت یک پراپرتی برای value در نظر میگیری و در این پراپرتی در صورت تغییر value متد Invalidate رو صدا میزنی تا دوباره Paint کنه.
بهتره کدها رو در قالب یک کنترل ایجاد کنی.
مثال:

class MyProgressBar : Control
{
private uint value;
private uint maxValue;
private Color borderColor;
private Color progressColor;
private bool drawBorder;

public bool DrawBorder
{
get { return drawBorder; }
set { drawBorder = value; }
}
public Color ProgressColor
{
get { return progressColor; }
set { progressColor = value; }
}

public Color BorderColor
{
get { return borderColor; }
set { borderColor = value; }
}

public uint Value
{
get { return this.value; }
set
{
this.value = value;
this.Invalidate();
}
}

public uint MaxValue
{
get { return maxValue; }
set { maxValue = value; }
}

public MyProgressBar()
{
this.DoubleBuffered = true;
this.progressColor = Color.Blue;
this.BorderColor = Color.Black;
this.DrawBorder = true;
this.MaxValue = 100;
}

protected override void OnPaint(PaintEventArgs e)
{
double valueD = Convert.ToDouble(value);
double widthD = Convert.ToDouble(this.Width);
double maxvalueD = Convert.ToDouble(maxValue);
int progressWidth = (int)System.Math.Ceiling(valueD / maxvalueD * widthD);

e.Graphics.FillRectangle(new SolidBrush(progressColor), 0, 0, progressWidth, this.Height);

if (drawBorder)
{
e.Graphics.DrawRectangle(new Pen(new SolidBrush(borderColor)), 0, 0, this.Width - 1, this.Height - 1);
}

base.OnPaint(e);
}
}

MehdiElexal
پنج شنبه 09 مرداد 1393, 22:55 عصر
جناب افراد آیا امکان این هست که این کلاس رو به یک DLL تبدیل کنید ؟
با تشکر

hamid685
شنبه 11 مرداد 1393, 10:54 صبح
سلام اینم dll

نشد تو سایت اپلود کنم


http://s5.picofile.com/file/8133051526/ProgressBar.rar.html

MehdiElexal
یک شنبه 12 مرداد 1393, 10:56 صبح
سلام اینم dll

نشد تو سایت اپلود کنم


http://s5.picofile.com/file/8133051526/ProgressBar.rar.html

اگه امکانش هست سورس رو هم بگذارید ممنون میشم یا طریقه استفاده از توابع برای رسم پروگرس
با تشکر

hamid685
دوشنبه 13 مرداد 1393, 07:11 صبح
اگه امکانش هست سورس رو هم بگذارید ممنون میشم یا طریقه استفاده از توابع برای رسم پروگرس با تشکر سورس progressbar