PDA

View Full Version : مبتدی: کشیدن خط در zoomable & scrollable pictureBox



zha.aye
سه شنبه 17 خرداد 1390, 08:31 صبح
سلام
من یک zoomable & scrollable pictureBox دارم می خوام با انتخاب کاربر در یک نقطه خاص از تصویر یک خط کشیده بشه اما با اینکه کدش رو توی رخداد paint هم می نویسم اتفاقی نمی افته میشه یکی بگه مشکل از کجاس؟
کنترل zoomable & scrollable pictureBox رو هم ضمیمه می کنم.

saman6384
سه شنبه 17 خرداد 1390, 14:13 عصر
invalidate()
میکنی؟

gwbasic
سه شنبه 17 خرداد 1390, 16:07 عصر
کنترل شما از یه راه ساده برای امکان زوم استفاده کرده و اونم اینه که از UserControl ارث برده و در دل اون یک Panel وجود داره (AutoScroll=true) و در دل Panel یه picturebox وجود داره و ...
بنابراین شما وقتی پشت رویدادا Paint کد می نویسید ، این Paint مربوط به UserControl هست و درنتیجه خطی که شما می کشید زیر Panel قرار می گیره و نمایش داده نمیشه
راه حل ساده ولی زشت اینه که کنترل PictureBox داخلی رو Public کنید و پشت Paint این کنترل کد بنویسید.
اما راه بهتر چیه؟:لبخندساده:

saman6384
سه شنبه 17 خرداد 1390, 17:09 عصر
اگه مشکل اینه!
خوب تو همون کلاس usercontrol واسه رویدادت کد بنویس!!
لزومی نداره که public بشه!!!
تو فرم اصلی فقط usercontrol اضافه کن! دیگه کدی هم نمیخواد!

zha.aye
سه شنبه 17 خرداد 1390, 21:24 عصر
اگه مشکل اینه!
خوب تو همون کلاس usercontrol واسه رویدادت کد بنویس!!
لزومی نداره که public بشه!!!
تو فرم اصلی فقط usercontrol اضافه کن! دیگه کدی هم نمیخواد!
یعنی کاری که باید بکنم اینه که توی کلاس کنترلم این event رو قرار بدم؟؟ من توی فرم اصلی می خوام با انتخاب کاربر بره یه نقطه ای رو مشخص کنه این جوری مجبورم تمام event ها روی توی کلاس کنترل قرار بدم؟(اینکه خیلی بده)

saman6384
سه شنبه 17 خرداد 1390, 22:15 عصر
شما هر جایی که بخواید میتونید واسه event تتون کد بنویسید!!!
سلیقه ایه دیگه!:چشمک:



اما چرا بده؟:متفکر:

gwbasic
چهارشنبه 18 خرداد 1390, 08:02 صبح
هدف از کنترل zoomable & scrollable pictureBox از اسمش مشخصه بنابراین نباید کار دیگه ای انجام بده در نتیجه از ساختار درونیش نباید کسی مطلع بشه (Encapsulation) البته این کنترل ناقصه و کار خودشو خوب انجام نمی ده مثلا Image نداره باید اسم فایل رو بهش داد که این کافی نیست.

حالا اگه شما می خواهید کنترلتون کار رسم خط رو هم انجام بده بهتره اول پراپرتی Image رو به کنترل اضافه کنید و سپس کنترل دیگه ای از این کنترل مشتق کنید که کار رسم خط رو هندل کنه به این ترتیب که رویداد های موس رو هندل کنه البته اگر به غیر از خط اشکال دیگه ای هم هست بدیهیه که یه پراپرتی برای نوع شکل هم می خواهید و ... خلاصه اینکه باید هر کنترلی کار خودش رو انجام بده نه بیشتر نه کمتر اینطوری نگهداری کنترل کار ساده تری هست تا اینکه همه چیز Public باشه و دستکاری یه کنترل از هر جایی امکان پذیر باشه.