PDA

View Full Version : Drag&Drop کنترلها در زمان اجرا



meysam_pro
یک شنبه 04 مرداد 1388, 14:37 عصر
سلام
توی یه فرم چندتا دکمه(Button) دارم، میخام اینهارو در زمان اجرا موقعیتشون رو در صفحه عوض بکنم.
مثال: وقتی برنامه رو اجرا کردم، دکمه تو سمت چپه، و من از طریق Drag-Drop موقعیت اونرو عوض میکنم.چیزی مثله جابجایی آیکنها روی دسکتاپ.

مثالهای Microsoft رو نگاه کردم ولی همش واسه انتقال داده با Drag-Drop هستش.

hozouri
یک شنبه 04 مرداد 1388, 14:59 عصر
من براتون یه پروژه می ذارم من خودم همیشه از همچین راه حلی استفاده می کنم.

البته این راه حل را برای نظر ارائه کردم و شما می تونید این رو دقیق تر در بیارید ...

meysam_pro
یک شنبه 04 مرداد 1388, 15:45 عصر
من براتون یه پروژه می ذارم من خودم همیشه از همچین راه حلی استفاده می کنم.

البته این راه حل را برای نظر ارائه کردم و شما می تونید این رو دقیق تر در بیارید ...

دست شما درد نکنه، ولی راه حل استانداردش مدنظرم بود. از طریق Eventی به اسم DoDragDrop هر کنترل. تو ابن حالت شکل دکمه به صورت Ghost هم نشون میده. اگر دوستان نظری دارن لطف کنن.

mina1363
یک شنبه 04 مرداد 1388, 16:26 عصر
سلام دوستان عزیز
من هم همچین سوالی دارم با این تفاوت که شما کنترلها مانند button را جابجا کردید با این تفاوت که من میخوام وقتی باکاربر point شیء را طراحی کرد حالا بتونه اونو جابجا کنه این چه جوریه؟

sd.CSharpProgrammer
یک شنبه 04 مرداد 1388, 17:51 عصر
سلام
يه مدت ميخواستم برنامه اي مثل adobe acrobat بنويسم كه بشه اسناد قابل حمل ساخت و اونارو بشه تو هر كامپيوتر استفاده كرد. البته فرمت اسناد رو متفاوت با pdf در نظر گرفته بودم. قسمت هايي از برنامه رو نوشتم ولي در ميونه راه نشستم فكر كردم كه : من اگه اين برنامه رو تموم كنم و حتي اگه چيز جالبي هم در بياد كي مياد از برنامه من استفاده ميكنه تا وقتي كه يه برنامه قويتر از اون رو شركت adobe مدتها پيش ساخته و همه با پرداخت 2000 تومان ميتونن برنامه اش رو تهيه و استفاده كنن. واسه همين برنامه رو متوقف كردم و ديگه ادامش ندادم. بگذريم... :لبخند:

در جواب دوستم mina1363 برنامه اي كه گفتم همچين حالتي داشت. يعني كاربر ميتونست اشيايي در زمان اجرا توليد كنه و اونارو تغيير اندازه و جابجا كنه.
برنامه رو فشرده كردم ولي حجم فشردش 575 كيلوبايت شد كه نميشه آپلود كرد. اگه مايلي ايميلت رو بذار واست بفرستم.

موفق باشي

sd.CSharpProgrammer
یک شنبه 04 مرداد 1388, 17:56 عصر
و اما در جواب دوستم meysam_pro :

اينكار رو به روشهاي مختلفي ميتوني انجام بدي. يكي از اين روشها استفاده از توابع api ويندوزه.




using System.Runtime.InteropServices;


[DllImport("user32.dll")]
static extern int ReleaseCapture();
[DllImport("user32.dll", EntryPoint = "SendMessageA")]
static extern int SendMessage(int hwnd, int wMsg, int wParam, object lParam);
private const int WM_NCLBUTTONDOWN = 161;


private void button1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(button1.Handle.ToInt32(), WM_NCLBUTTONDOWN, 2, 0);
}
}



موفق باشي

hozouri
یک شنبه 04 مرداد 1388, 18:05 عصر
دوست عزیز اگر لطف کنی برای من هم بفرستی یه دنیا ممنون میشم ...

ولی حیفه این پروژه رو ادامه بده. نمی گم کل وقتت رو بذار ولی خب روش کار کن اگر ما برنامه نویسان هر چیزی رو که بخوان بگیم قفل شکستش 1000 تومان توی بازار هست که دنیای نرم افزار ایران تا ابد همینجوره

meysam_pro
یک شنبه 04 مرداد 1388, 20:54 عصر
و اما در جواب دوستم meysam_pro :

اينكار رو به روشهاي مختلفي ميتوني انجام بدي. يكي از اين روشها استفاده از توابع api ويندوزه.




using System.Runtime.InteropServices;


[DllImport("user32.dll")]
static extern int ReleaseCapture();
[DllImport("user32.dll", EntryPoint = "SendMessageA")]
static extern int SendMessage(int hwnd, int wMsg, int wParam, object lParam);
private const int WM_NCLBUTTONDOWN = 161;


private void button1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(button1.Handle.ToInt32(), WM_NCLBUTTONDOWN, 2, 0);
}
}



موفق باشي

دستتون درد نکنه ولی همونجور که تو چند پست قبل گفتم از طریق event مربوط به DoDragDrop میخام.
اگه امکانش باشه، بدون Api