PDA

View Full Version : آموزشی: تغییر Render کنترل های دات نت 2005



HO457
شنبه 29 بهمن 1384, 00:24 صبح
سلام خدمت همه دوستان عزیز.
یکی از امکاناتی که در دات نت 2005 قرار داده شده امکان Custom Render بعضی کنترل های دات نت هستش. مثلاَ براحتی میشه برای ToolStrip یا MenuStrip رندر دلخواه و ایجاد کرد. اما چجوری؟؟؟ برای توضیح یه مثال میزنم:
داخل C# یک پروژه جدید ایجاد کنید از نوع Windows Application. روی فرم یک کنترل ToolStrip و یک Button قرار بدید و یک کلاس به پروژه اضافه کنید و نام کلاس رو MyRender بزارید. وارد کلاس MyRender شده و خط public class MyRender رو به صورت زیر تغییر بدید:


public class MyRender : System.Windows.Forms.ToolStripRenderer

حالا داخل کلاس کدهای زیر رو بنویسید:


protected override void OnRenderToolStripBackground(System.Windows.Forms.T oolStripRenderEventArgs e)
{
base.OnRenderToolStripBackground(e);
Graphics g = e.Graphics;
using (LinearGradientBrush b = new LinearGradientBrush(new Rectangle(0, 0, e.ToolStrip.Bounds.Width, e.ToolStrip.Bounds.Height), Color.White, Color.Silver, 90))
{
g.FillRectangle(b, new Rectangle(0, 0, e.ToolStrip.Bounds.Width, e.ToolStrip.Bounds.Height));
}
}
protected override void OnRenderButtonBackground(System.Windows.Forms.Tool StripItemRenderEventArgs e)
{
base.OnRenderButtonBackground(e);

Graphics g = e.Graphics;
if (e.Item.Selected)
{
if (e.Item.Pressed)
{
using (LinearGradientBrush b = new LinearGradientBrush(new Rectangle(0, 0, e.Item.Bounds.Width, e.Item.Bounds.Height), Color.Silver, Color.White, 90))
{
g.FillRectangle(b, new Rectangle(0, 0, e.Item.Bounds.Width, e.Item.Bounds.Height));
}
}
else
{
using (LinearGradientBrush b = new LinearGradientBrush(new Rectangle(0, 0, e.Item.Bounds.Width, e.Item.Bounds.Height), Color.LightSkyBlue, Color.LightSkyBlue, 90))
{
g.FillRectangle(b, new Rectangle(0, 0, e.Item.Bounds.Width, e.Item.Bounds.Height));
}
}
}
}

حالا به فرم برنامه برگشته و کدهای زیر رو داخل کنترل button بنویسید:


toolStrip1.RenderMode = ToolStripRenderMode.ManagerRenderMode;
ToolStripManager.Renderer = new MyRender();

پس از اجرای برنامه و کلیک روی button خواهید دید که استایل toolStrip تغییر خواهد کرد. میتوان با اضافه کردن سایر قسمت های مربوط داخل کلاس استایل مورد نظر رو ایجاد کرد. این یکی از توانایی های جدید دات نت 2005 میباشد که باعث میشود کاربر نیازی به ایجاد یک کامپوننت جدید برای رندر کنترل نداشته باشد و فقط با ایجاد یک کلاس داخل برنامه این کار رو براحتی انجام بده. این کار رو برای تمام کنترل هایی که خاصیت RenderMode دارند میشه انجام داد.
موفق باشید.

محمد میرمصطفی
شنبه 29 بهمن 1384, 23:56 عصر
دستت درد نکنه، جالب بود. اگه بازم از ایندست تجریبات در زمینه Interface داشتی بی‏زحمت با ما هم در میون بزار مطمئن باش بی‏پاداش نمی‏مونه.

HO457
یک شنبه 30 بهمن 1384, 00:05 صبح
خواهش میکتم قابل شما و دوستان عزیز رو نداشت. فعلاَ دارم رو یه کلاس کار میکنم که کنترل ها رو با 3 استایل خود 2005، سیلور و اگه بشه استایل office 12 رندر کنه، تموم شد میزارم برای دانلود که همه دوستان استفاده کنند.