PDA

View Full Version : سوال: ایجاد کلاس دارای تابع گرافیکی و استفاده در فرم ها



ghasem110deh
پنج شنبه 11 تیر 1394, 01:28 صبح
سلام به همه ...
دوستان من از این کد تو رویداد paint فرم و یا کنترل دلخواه استفاده میکنم :


Graphics mGraphics = e.Graphics;
Pen pen1 = new Pen(Color.FromArgb(43, 87, 154), 0);
Rectangle Area1 = new Rectangle(0, 0, this.Width - 1, this.Height - 1);
LinearGradientBrush LGB = new LinearGradientBrush(Area1, Color.FromArgb(43, 87, 154), Color.FromArgb(43, 87, 154), LinearGradientMode.Vertical);
mGraphics.FillRectangle(LGB, Area1);
mGraphics.DrawRectangle(pen1, Area1);


حالا چطور باید توی کلاس بنویسم که بشه تو تمام برنامه (رویداد paint کنترل مورد نظر) ازش استفاده کنم ؟

ظاهرا باید پراپرتی تعریف کنم ، که این تابع گرافیکی رو به value توی set پاس بدم
اما مشکل اینه که چجور واسش (توی کلاس) یه کنترل پیشفرض تعریف کنم که بشه تو هر کنترل دیگه (تو رویداد paint) فراخوانی کنم !

Mahmoud Zaad
پنج شنبه 11 تیر 1394, 09:28 صبح
سلام
به شکل زیر میشه در یه متد تعریفش کرد:
class Class1
{
public static void GradiantBackColor(Graphics mGraphics, int width, int height)
{
Pen pen1 = new Pen(Color.FromArgb(43, 87, 154), 0);
Rectangle Area1 = new Rectangle(0, 0, width - 1, height - 1);
LinearGradientBrush LGB = new LinearGradientBrush(Area1, Color.FromArgb(43, 87, 154), Color.FromArgb(43, 87, 154), LinearGradientMode.Vertical);
mGraphics.FillRectangle(LGB, Area1);
mGraphics.DrawRectangle(pen1, Area1);
}
}

طریقه استفاده: در رویداد paint کنترل مورد نظر می نویسیم:
Class1.GradiantBackColor(e.Graphics, this.Width, this.Height);

البته رنگهای 1 و 2 رو هم میشه در متد تعریف کرد.

ghasem110deh
پنج شنبه 11 تیر 1394, 10:25 صبح
سلام و ممنون ...
کارم راه افتاد
-------------------
حالا هدفم اینه که تو کلاس چند تا از این متد تعریف کنم (با طیف رنگی مختلف) و توی تنظیمات برنامه به کابر اجازه تغییر رنگ قالب اصلی برنامه رو بدم !
روش درستی هست !؟

Mahmoud Zaad
پنج شنبه 11 تیر 1394, 11:19 صبح
حقیقتش تا الان این کار رو انجام ندادم ولی شما می تونید سایر پارامترها مثل رنگ 1، 2، رنگ حاشیه، ضخامت رنگ حاشیه و حتی جهت توزیع رنگ (شما vertical رو به صورت پیش فرض نوشتید که حالتهای دیگه هم داره) توی متد تعریف کنید حالا می تونید چند تا حالت پیش فرض هم که از نظر شما زیبا هستند تعریف کنید که کاربر از بین اینها انتخاب کنه و یا امکانی داشته باشید که کاربر رنگهای دلخواهش رو انتخاب کنه.
مثلاً میشه رشته هایی به صورت زیر داشت: red, white, yellow, 2, horizontal این میشه حالت 1، یا blue, white, 1, vertical میشه حالت 2 و ... که اینها رو مثلاً در یک combobox نمایش می دید. حالا وقتی کاربر یکی از اینها رو انتخاب کرد شما رشته رو با استفاده از کاراکتر (,) splite می کنید و به متد زیر پاس میدید. (رشته اول میشه c1، رشته دوم میشه c2، سومی میشه borderColor و ...)


public static void GradiantBackColor(Graphics mGraphics, int width, int height, Color c1, Color c2, Color borderColor, int borderThickness, LinearGradientMode mode)
{
Pen pen1 = new Pen(borderColor, borderThickness);
Rectangle Area1 = new Rectangle(0, 0, width - 1, height - 1);
LinearGradientBrush LGB = new LinearGradientBrush(Area1, c1, c2, mode);
mGraphics.FillRectangle(LGB, Area1);
mGraphics.DrawRectangle(pen1, Area1);
}

شاید روشهای بهتری هم باشه چون قبلاً انجام ندادم این به ذهنم میرسه.

---------------------- ویرایش
می دونید که برای رنگ متد FromName رو داریم: Color.FromName(textBox1.Text)