PDA

View Full Version : سوال: مشکل در ایجاد کامپوننت ویندوزی



minamorsali
دوشنبه 24 بهمن 1390, 16:30 عصر
سلام
ببخشید من یه کامپوننت ویندوزی در سی شارپ ایجاد کردم که یه property از نوع brush داره . حالا من می خوام در جدول properties این خصوصیت در کنارش بشه یه پالت رنگ داشته باشه که رنگ brush رو از پالت انتخاب کنم.

مثلا مثل خصوصیت backcolor در کنترل های خود ویژوال استادیو...

میشه همچین کاری رو انجام داد؟چطوری؟

متشکرم

minamorsali
دوشنبه 24 بهمن 1390, 19:24 عصر
دوستان راهی بلد نیستید؟؟؟؟لطفا کمکم کنید...با تشکر

saeed.mohammadi
دوشنبه 24 بهمن 1390, 20:04 عصر
سلام دوست عزیز
شما یک جستجو.....
یک مثال


public int noe;
public int noe_textbox
{
get {
return noe;
}
set
{//0 adad harf 1 reshteh 2 adad bi harf
if (value == 0 || value == 1 || value == 2)
{
noe = value;
}
else
{
noe = 0;
}
}
}

minamorsali
دوشنبه 24 بهمن 1390, 22:50 عصر
دوست عزیز جستجو کردم اما به نتیجه نرسیدم و بعد تاپیک جدید باز کردم.

اما فکر کنم منظورم رو درست نرسوندم... من یه property از نوع Pen تعریف کردم: public Pen MyPen
{
get
{
return _MyPen;
}
set
{
if (value == Pens.Pink || value == Pens.Blue || value == Pens.Gold)
{
_MyPen = value;
ucCircle_Load(null, null);
}
else
{
_MyPen = Pens.Fuchsia;
ucCircle_Load(null, null);
}
}
}


با مثال شما هم که امتحان کردم بازم توی جدول properties این خاصیت رو نمیشه تغییر داد...من می خوام بتونم رنگ pen رو بشه از تغییر جدول properties تغییر داد.

saeed.mohammadi
سه شنبه 25 بهمن 1390, 10:31 صبح
سلام دوست عزیز
1-معذرت...
2-چرا شما از خود color استفاده نمیکنید؟

public Pen p;
public Color noe_p;
public Color noe_textbox_p
{
get
{
return noe_p;
}
set
{//0 adad harf 1 reshteh 2 adad bi harf
if (value == Color.Red)
{
noe_p = value;
p = new Pen(value);

}
else
{
noe_p =Color.White;
}
}
}

minamorsali
سه شنبه 25 بهمن 1390, 12:05 عصر
با تشکر از راهنمایی مفیدتون
من با ایده ای که از برنامه شما گرفتم تونستم از یه solidbrush استفاده کنم و رنگ رو درون خصوصیت mybrush ام تغییر بدم...

اما وقتی کنترل رو درون فرمم استفاده می کنم با کمک برنامه نویسی می تونم رنگ رو تغیر بدم اما در پنجره properties این خصوصیت غیرقابل تغییر است و جلوی خصوصیتش نوشته System.Drawing.SolidBrush که نمیشه تغییرش داد من می خوام بتونم بدون برنامه نویسی هم بتونم تغییر بدم

gwbasic
سه شنبه 25 بهمن 1390, 13:22 عصر
عنوان تاپیک را اگر به صورت زیر تعریف می کردید گویا تر می بود:
"چگونگی تعریف Property ای که در DesignTime و در پنجره PropertyGrid قابل مقداردهی باشد."

اما در جواب باید عرض کنم که اگر property شما از نوع Primitive باشد مثل int, string نیاز به تنظیم خاصی نیست و اگر از نوعی باشد که Editor آن موجود باشد مثل Color باز هم مشکلی نیست امکان مقداردهی در زمان DesignTime وجود دارد. ولی در غیر این صورت شما باید Editor مورد نظرتون رو خودتون پیاده سازی کنید و برای این کار باید UITypeEditor رو پیاده سازی کنید یعنی کلاسی بنویسید (مثلا BrushEditor) که از UITypeEditors ارث برده و آن را پیاده سازی کند و در نهایت برای پراپرتی مورد نظرتون EditorAttribute را روی همین editor که نوشتید یعنی BrushEditor ست کنید.

برای اعمالی که به DesignTime مربوط می شود می تونید فصل 11 و 12 مربوط به کتاب Windows Forms 2.0 Programming را مطالعه کنید