PDA

View Full Version : سوال: کشیدن خط با کد نویسی



ashkan2005
جمعه 02 اردیبهشت 1390, 07:55 صبح
سلام به همه اساتید و دوستان عزیز
من می خوام یه کنترل مثل datagrideview درست کنم که کارش نمایش اطلاعات نیست گرفتن اطلاعاته.همه کارهاش رو هم کردم فقط می خوام وقتی یک سطر textbox به فرم اضافه می شه زیر اون یک خط هم اضافه بشه اما نمی تونم.
textbox ها رو با استفاده از آرایه ها طراحی کردم اما چون خط از نوع کنترل نیست نمی تونم آرایه ایش کنم.
اگه زحمتی نیست کمکم کنید.

hi level hdd
جمعه 02 اردیبهشت 1390, 11:55 صبح
با سلام
خط هم از کلاس فرم میتونه ارث ببره ( یا پنل )
به جای خط یه پنل بذار که مثلا ارتفاعش 2 پیکسله و رنگش رو هم هر جوری خواستی تغییر میدی

Amir Oveisi
جمعه 02 اردیبهشت 1390, 12:04 عصر
با سلام
خط هم از کلاس فرم میتونه ارث ببره ( یا پنل )
به جای خط یه پنل بذار که مثلا ارتفاعش 2 پیکسله و رنگش رو هم هر جوری خواستی تغییر میدی

باز هم روش های نادرست!
دوست گرامی دقت کنید که هدف وسیله رو توجیه نمی کنه، چرا باید اینکار رو انجام داد و پانلی که خودش یک کنترل هست و کلی property و method داره و در نتیجه کلی حافظه مصرف می کنه رو برای این کار استفاده کرد؟ در حالی که روش های بهتری هم وجود داره.
به نظر بنده بهترین روش این هست که کنترل TextBox رو customize کنید و (با ایجاد user control) و براش یک property جدید اضافه کنید و برای OnPaint اش هم چک کنید که هر موقع مقدار اون property مثلا true شد، زیر textbox یک خط draw کنه.
بعد به جای TextBox معمولی، از user control ای که ساختید استفاده کنید.

موفق باشید

ashkan2005
جمعه 02 اردیبهشت 1390, 15:07 عصر
با سلام خدمت دوستان و تشکر از توجه تون
خیلی ممنون روش شما رو هم امتحان می کنم .فکر کنم روش خوبی باشه.

اما من این مشکلم رو تو فروم msdn هم مطرح کردم که این جواب رو دادن . جواب رو اینجا می زارم تا شما هم نظر تون رو بگین.

Welcome to the MSDN Forum. Thanks for posting here.
As your description, that’s all due to NullReference and the OOP.
Before we use canvas[0] and line1[0], we need it’s reference. The following is my code for your reference:
privatevoid button3_Click(object sender,EventArgs e)
{
ShapeContainer[] canvas = new ShapeContainer[2];
LineShape[] line = new LineShape[2];
for (int i = 0; i <= 1; i++)
{
canvas[i] = new ShapeContainer();
canvas[i].Parent = this;
line[i] = new LineShape();
line[i].Parent = canvas[i];
line[i].Name = "line" + i.ToString();
line[i].StartPoint = new Point(0, 0);
line[i].EndPoint = new Point(10 + i * 10, 100);
}
}
But we’d better to code like this:
privatevoid button2_Click(object sender,EventArgs e)
{
ShapeContainer canvas = new ShapeContainer();// each form, we'd better to set one ShapeContainer, said in MSDN.
canvas.Parent = this;
for (int i = 0; i <= 2; i++)
{

LineShape line = new LineShape();
line.Parent = canvas;
line.Name = " line" + i.ToString();
line.StartPoint = new Point(0, 0);
line.EndPoint = new Point(100 - i * 10, 100 - i * 40);

}
}

If there is not a solution for you, please do not hesitate to let us know.
Thanks for your understanding and support.
Best Regards,
Rocky Yue[MSFT]
MSDN Community Support | Feedback to us (msdnmg@microsoft.com)
Get or Request Code Sample from Microsoft (http://1code.codeplex.com/)
Please remember to mark the replies as answers if they help and unmark them if they provide no help.

Amir Oveisi
جمعه 02 اردیبهشت 1390, 15:20 عصر
اونجا چه سوالی مطرح کردید که این جواب رو گرفتید؟

ashkan2005
جمعه 02 اردیبهشت 1390, 19:38 عصر
چون من کار با lineshape را به صورت آرایه ای بلد نبودم و تو فروم های ایرانی هم پیدا نکردم از اونها چگونگی کار با lineshape بصورت آرایه ای رو خواستم. و این جواب رو گرفتم که خیلی کمکم می کنه .
ممنون از لطف و توجه شما و همه عزیزان

http://social.msdn.microsoft.com/Forums/en-US/csharplanguage/thread/024aa2e0-ffa0-4392-aeef-440e9cfa78fd