PDA

View Full Version : یک چیزی شبیه Refresh



مهدی رحیم زاده
جمعه 23 شهریور 1386, 20:01 عصر
من روی یک picturebox با حرکت ماوس خط می کشم و یک مشکلی که دارم اینه که روی رویداد move مربوط به ماوس باید از Refresh استفاده کنم که موجب پاک شدن خط میشه ...
بجز رویداد Refresh رویداد دیگه ای شبیه اون هست که خط رو پاک نکنه ، اما همون کار رو انجام بده ؟؟؟
و اگر نیست شما چه پیشنهادی می کنید که این مشکل حل بشه ؟

بازم ممنون :قلب::بوس:

BeyondMicrosoft
جمعه 23 شهریور 1386, 20:19 عصر
با سلام
چیزی که به ذهن من میرسه :
اون خط را در رویداد Paint اون PictureBox بکشید تا هربار که دوباره کشیده شد خط نیز دوباره کشیده بشه.

مهدی رحیم زاده
شنبه 24 شهریور 1386, 13:12 عصر
چیزی که به ذهن من میرسه :
اون خط را در رویداد Paint اون PictureBox بکشید تا هربار که دوباره کشیده شد خط نیز دوباره کشیده بشه.

میشه توضیح بدین که چطور این کار رو انجام بدم (رسم خط توی این رویداد) من در حال حاضر روی رویداد کلیک این کار رو انجام می دم ...

BeyondMicrosoft
شنبه 24 شهریور 1386, 13:24 عصر
با سلام
خطی را که می خواهید روی عکس باقی بماند به جای اینکه اون خط را در روی داد Click بکشید آن را در رویداد Pain بکشید این روی داد زمانی که Control مورد نظر نیاز به کشیده شدن مجدد (یا Invalidate) بشه رخ میده


private void Pic_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawLine(new Pen(Color.Blue) , 0, 0, 100, 100);
}

مهدی رحیم زاده
شنبه 24 شهریور 1386, 17:05 عصر
سلام دوست عزیز
ممنونم که با حوصله جواب سئوالات منو میدین . با اینم درست نشد .
این برنامه رو نگاه کنید من می خوام که روی این picturebox با ماوس خط بکشم اما به خاطر refresh شدن نمیشه . این خطوطی که میکشم باید روی فرم بمونه تا وقتی که من بخوام یعنی به عنوان مثال دکمه Clear رو بزنم ...
ببینید می تونید کمکم کنید ؟؟؟

ممنون:بوس:

BeyondMicrosoft
شنبه 24 شهریور 1386, 17:35 عصر
با سالام


ممنونم که با حوصله جواب سئوالات منو میدین . با اینم درست نشد .

نمی دونم کنایه بود یا نه به هر حال. :چشمک:
من همون برنامه را با یک خط که دائم داخل PictureBox می مونه درست کردم ببینید :

مهدی رحیم زاده
شنبه 24 شهریور 1386, 20:51 عصر
سلام دوست گلم
نه عزیزم کنایه نیست ، جدی گفتم .
من اونو دیدم و درستش کردم اما همونطوری که گفتم این اون چیزی که من می خوام نیست ، همونطوری که گفتم من می خوام این خط رو با کلیک رسم کنم و وقتی که دیگه نخواستم بتونم اونو حذفش کنم ...
راهی که به نظر من میرسه اینه که تمام نقاط رو توی یک آرایه ذخیره کنم و با رسم هر خط و ذخیره اون توی آرایه یک خونه به آرایه برای نگه داری نقطه بعدی اضافه بشه و بعد از هر بار refresh تمام اون نقاط رو از آرایه بخونم و دوباره خط ها رو رسم کنم ...
نظر شما چیه ...

BeyondMicrosoft
شنبه 24 شهریور 1386, 21:02 عصر
با سلام
نه اینطوری حافظه وحشتناکی از سیستم گرفته میشه نظر من اینه که یک متغیر bool بگذارید زمانی که می خواهید کشیده بشه آن را true کنید و در تابع رویداد Paint چک کنید اگر true بود خط را رسم کند
مثلا در رویداد Click آن را true کنید

حامد مصافی
شنبه 24 شهریور 1386, 21:42 عصر
@ iranmsb (http://barnamenevis.org/forum/member.php?u=18292) :
{
یک شی system.drawing.bitmap ایجاد کنید.
یک شی جدید system.drawing.graphics ایجاد کنید.
شی graphics را با متد ایستای fromimage به شی bitmap مرتبط کنید.
اعمال گرافیکی را انجام دهید.
شی Bitmap را به عنوان تصویر پس زمینه picturebox مقدار دهی کنید.
}

مهدی رحیم زاده
شنبه 24 شهریور 1386, 22:19 عصر
BlackDal عزیز
میشه اینی رو گفتید روی کد بالا برام پیاده کنید ...
ممنون

مهدی رحیم زاده
یک شنبه 25 شهریور 1386, 16:48 عصر
من با کلیک خط رو رسم مس کنم اما با رسم هر خط قبلی پاک میشه ، شما دلیلش رو نمیدونید ؟؟؟

PC2st
یک شنبه 25 شهریور 1386, 17:03 عصر
نمونه برنامه Paint در کتاب هاشمیان هست... (صفحه 532)