PDA

View Full Version : سوال: جابجایی شکل بر روی فرم



mahan123
پنج شنبه 10 اردیبهشت 1388, 08:36 صبح
سلام
من چه طوری می تونم یک شکلی که خودم بر روی فرم طراحی کرده ام را جابجا کنم؟
یعنی با کلیک ماوس شکل رو انتخاب کنم و به محل مورد نظر انتقال بدم؟
البته بیشتر از یک شکل بر روی فرم وجود دارد پس انتخاب شکل هم مهم است

__H2__
جمعه 11 اردیبهشت 1388, 03:33 صبح
سلام
این کار ساده است ولی کدش کمی زیاد میشود...
کافی است رویدادهای ماوس را بهع درستی هندلر کنید و در قبلا هر یک کد مناسب را درج کنید.

خیلی از افراد برای سادگی از کنترلرهای ویندوزی برای نمایش هر لایه استفاده میکنند ولی اینکار برنامه را حجیم میکند و قابلیتهای گرافیکی تان را کاهش میدهد (مثل zoom و یا print و....)

یعنی میتوانید یک Collection از تصاویر و موقعیت هایشان ایجاد کنید و سپس با هندلر رویدادهای ماوس نصبت به تغییر موقعیتهای داخل Collection اقدام کنید و در رویداد OnPaint اقدام به ترسیم تک تک تصاویر در موقعیتهای خود کنید.

به عنوان نمونه میتوانید به این کنترلر نگاه کنید که بر همین اساس طراحی شده.
(البته کنترلر ناقص است و وقت نکردم تکمیلش کنم، وگرنه پیشنهاد میکردم از این کنترلر ویزه استفاده کنید و میانبر بزنید!)

دانلود مستقیم:
http://Support.h02.ir/fwlink/?linkid=13&File=HNet.DesignerBox.zip

http://h02.ir/Files/Temp/002-HNet.DesignerBox.gif

mahan123
جمعه 11 اردیبهشت 1388, 17:34 عصر
سلام
این کار ساده است ولی کدش کمی زیاد میشود...
کافی است رویدادهای ماوس را بهع درستی هندلر کنید و در قبلا هر یک کد مناسب را درج کنید.

خیلی از افراد برای سادگی از کنترلرهای ویندوزی برای نمایش هر لایه استفاده میکنند ولی اینکار برنامه را حجیم میکند و قابلیتهای گرافیکی تان را کاهش میدهد (مثل zoom و یا print و....)

یعنی میتوانید یک Collection از تصاویر و موقعیت هایشان ایجاد کنید و سپس با هندلر رویدادهای ماوس نصبت به تغییر موقعیتهای داخل Collection اقدام کنید و در رویداد OnPaint اقدام به ترسیم تک تک تصاویر در موقعیتهای خود کنید.

به عنوان نمونه میتوانید به این کنترلر نگاه کنید که بر همین اساس طراحی شده.
(البته کنترلر ناقص است و وقت نکردم تکمیلش کنم، وگرنه پیشنهاد میکردم از این کنترلر ویزه استفاده کنید و میانبر بزنید!)

دانلود مستقیم:
http://Support.h02.ir/fwlink/?linkid=13&File=HNet.DesignerBox.zip

http://h02.ir/Files/Temp/002-HNet.DesignerBox.gif


راستش من نه از توضیحات چیزی فهمیدم نه از برنامه(که اصلا باز نشد) اگه ممکن یه کم مفصل تر توضیح بدین

__H2__
جمعه 11 اردیبهشت 1388, 20:54 عصر
سلام

که اصلا باز نشد
برنامه با VS2008 نوشته شده، و احتمالاً شما VS2005 دارید...
فعلاً میتوانید نمونه exe برنامه را از دایرکتوری DLL-Beta اجرا کنید و ببینید.
تا دست من هم برای توضیح دادن باز تر شود.


یه کم مفصل تر توضیح بدین
مفصل تر از آن خیلی زیاد میشود!
برای چه کاری میخواهید؟ برنامه تان چه میکند؟ شاید راه ساده تری پیدا شود.

mahan123
شنبه 12 اردیبهشت 1388, 11:01 صبح
من می خواهم گیت های AND , NAND,.... را که بر روی فرم وجود دارند بعد از اینکه انتخاب کردم با ماوس به نقطه مورد نظرم انتقال بدم(DRAG&DRAP)

__H2__
سه شنبه 15 اردیبهشت 1388, 15:46 عصر
سلام
این مورد کد شما را بسیار ساده تر میکند.
چون نیازی به resize هم ندارید.


یعنی میتوانید یک Collection از تصاویر و موقعیت هایشان ایجاد کنید و سپس با هندلر رویدادهای ماوس نصبت به تغییر موقعیتهای داخل Collection اقدام کنید و در رویداد OnPaint اقدام به ترسیم تک تک تصاویر در موقعیتهای خود کنید


اگه ممکن یه کم مفصل تر توضیح بدین
مثلاً ...
یک کلاس مثل این مینویسید :


public class Layer
{
public System.Drawing.Image Image;
public System.Drawing.Rectangle Rectangle;
public int GeteType;
}


این کلاس میتوانید توصعه پیدا کند و مشخصات هر گیت را نگه دارد، سپس collection ای از این نوع ایجاد میکنید


private System.Collections.Generic.List<Layer> m_Collection;


در متد onPaint اقدام به ترسیم همه گیتها در یک حلقه for میکنید و رویدادهای ماوس را هم به درستی هندلر میکنید و تکان دادن هر لایه-گیت را به درستی کد نویسی میکنید.

=====

امیدوارم مطالب فوق را متوجه شوید....
اگر بکارتان بیایید، و وقت کنم، شاید بتوانم کنترلر فوق را هم تکمیل کنم.
موفق باشید.

smgraphic
یک شنبه 15 آذر 1388, 19:28 عصر
سلام اگه منظورت درگ و دروپ کردنه مثلا یک button
است با کد زیر میشه این کار رو کرد,اول یه buuton روی فرم بزار بعد کد زیر را بنویس:::
:تشویق:

private void button1_MouseDown(object sender, MouseEventArgs e)
{
this.button1.DoDragDrop(this, DragDropEffects.Move);
}



private void Form1_DragDrop(object sender, DragEventArgs e)
{
this.button1.Location = newPoint(e.X -this.Location.X , e.Y - this.Location.Y );
}



private void Form1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}