PDA

View Full Version : سوال: Drag & Drop کردن یک کنترل



3Dmajid
یک شنبه 09 اسفند 1388, 00:07 صبح
با چه کدی میشه این امکان رو داد که کاربر تو محیط اجرای برنامه بتونه کنترل هارو درگ و دروپ کنه، مثل کنترل Label یا هر چیز دیگه.

Alirezanet
یک شنبه 09 اسفند 1388, 00:19 صبح
خوب میتونین از مختصات موس استفاده کنید ... که زمانی که تغییر کرد در درگ مختصات لیبلتون هم تغییر کنه و وقتی دراپ روانجام داد مختصات جدید رو برای لیبل بفرستین ...!

3Dmajid
یک شنبه 09 اسفند 1388, 00:26 صبح
میشه یه مثال بزنید ؟!! ؟؟؟ !!! ؟؟!! :گیج:

bad_boy_2007
یک شنبه 09 اسفند 1388, 07:37 صبح
يك PictureBox در فرم قرار دهيد و كد ذيل را در رويداد MouseMove آن قرار دهيد :



Private Sub PictureBox1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
If e.Button = Windows.Forms.MouseButtons.Left Then
Dim p As New System.Drawing.Point(MousePosition.X - Me.Left + PictureBox1.Left / 2, MousePosition.Y - Me.Top + PictureBox1.Top / 2)
PictureBox1.Location = p
End If
End Sub

sari-1369
یک شنبه 09 اسفند 1388, 08:20 صبح
این رو ببین ، تو همین سایت پیدا کردم .

http://barnamenevis.org/forum/showpost.php?p=715425&postcount=4

3Dmajid
یک شنبه 09 اسفند 1388, 10:20 صبح
يك PictureBox در فرم قرار دهيد و كد ذيل را در رويداد MouseMove آن قرار دهيد :



PrivateSub PictureBox1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
If e.Button = Windows.Forms.MouseButtons.Left Then
Dim p AsNew System.Drawing.Point(MousePosition.X - Me.Left + PictureBox1.Left / 2, MousePosition.Y - Me.Top + PictureBox1.Top / 2)
PictureBox1.Location = p
EndIf
EndSub


کد خوبیه ولی فاصله ی موس با پیکچر باکس وقتی move میکنه خیلی زیاد میشه ... موس باید روی پیکچر باکس باشه :متفکر:

Alirezanet
دوشنبه 10 اسفند 1388, 03:08 صبح
یه مثال کامل برات گذاشتم که تمام حالت های درگ رو نشون میده ....

kyrie-chan
دوشنبه 15 اسفند 1390, 14:09 عصر
سلام . من تازه واردم و نمیدونم کجا سوالم بگم ، اما چون خیلی حیاتیه و تا فردا وقت دارم ، لطفا بهم کمک کنین.
استاد خواسته به زبان vb.net برنامه ای بنویسیم که یک دکمه روی صفحه باشه . یک صفحه دیگه باز شه و مقدار گام های جا به جا شدن دکمه رو توش وارد کنیم و اوکی بزنیم . بعد تو اون صفحه اولیهاگه دکمه "w" زد بره بالا ، اگه "a" زد بره چپ ، اگه "d" زد بره راست و اگه "x" زد بره پایین . در ضمن اگه دکمه به کادرها رسید ، دکمه نزنه بیرون ، از کادر مقابل در بیاد .

این راهنمایی ها رو هم بهمون کرده :


برای پنجره ای که گام ها رو میگیره اینُ تعریف کنید :
در رویداد load فورم x=inputbox رو قرار بدین .
از msgbox.keychar برای گرفتن کد دکمه ها استفاده کنین و خاصیت kyepreviewرو true کنین .


طراحی و زیبا سازی نمره اضافه دارد . فقط کد ها ساده باشن که من مبتدی درکش کنم .

ببخشین ولی تو رو خدا زودی تا امشب بدین که من بخونم فدا به استاد میدم ضایع نشم ، هیچی ندونم . مرسی

فرید نجفلو
دوشنبه 15 اسفند 1390, 16:35 عصر
سلام . من تازه واردم و نمیدونم کجا سوالم بگم ، اما چون خیلی حیاتیه و تا فردا وقت دارم ، لطفا بهم کمک کنین.
استاد خواسته به زبان vb.net برنامه ای بنویسیم که یک دکمه روی صفحه باشه . یک صفحه دیگه باز شه و مقدار گام های جا به جا شدن دکمه رو توش وارد کنیم و اوکی بزنیم . بعد تو اون صفحه اولیهاگه دکمه "w" زد بره بالا ، اگه "a" زد بره چپ ، اگه "d" زد بره راست و اگه "x" زد بره پایین . در ضمن اگه دکمه به کادرها رسید ، دکمه نزنه بیرون ، از کادر مقابل در بیاد .

این راهنمایی ها رو هم بهمون کرده :


برای پنجره ای که گام ها رو میگیره اینُ تعریف کنید :
در رویداد load فورم x=inputbox رو قرار بدین .
از msgbox.keychar برای گرفتن کد دکمه ها استفاده کنین و خاصیت kyepreviewرو true کنین .


طراحی و زیبا سازی نمره اضافه دارد . فقط کد ها ساده باشن که من مبتدی درکش کنم .

ببخشین ولی تو رو خدا زودی تا امشب بدین که من بخونم فدا به استاد میدم ضایع نشم ، هیچی ندونم . مرسی



دوست عزیز با اینکه اینجا جایه این کار ها نیست ولی یه نمونه براتون می زارم
تا حد امکان ظاهرش رو تغییر دام (چون گفتین زیاد پیچیده نباشه)
اون جاهایی که می تونید حذف کنید رو علامت گذاشتم(اگه نتونستید متوجه بشید)
هر جا رو متوجه نشدی بپرس

83725

راستی برنامه رو تو 2010 نوشتم اگه از 2008 استفاده می کنید:
فایل با پسوند Sln رو با notepad باز و تو خط اول 11.00 رو به 10.00 و تو خط دوم 2010 رو به 2008 تغییر بدین و ذخیره کنید

kyrie-chan
دوشنبه 15 اسفند 1390, 17:31 عصر
دوست عزیز با اینکه اینجا جایه این کار ها نیست ولی یه نمونه براتون می زارم
تا حد امکان ظاهرش رو تغییر دام (چون گفتین زیاد پیچیده نباشه)
اون جاهایی که می تونید حذف کنید رو علامت گذاشتم(اگه نتونستید متوجه بشید)
هر جا رو متوجه نشدی بپرس
83711

راستی برنامه رو تو 2010 نوشتم اگه از 2008 استفاده می کنید:
فایل با پسوند Sln رو با notepad باز و تو خط اول 11.00 رو به 10.00 و تو خط دوم 2010 رو به 2008 تغییر بدین و ذخیره کنید

خیلی ممنون لطف کردین . بازم ببخشین که سوالم بی جا پرسیدم ...

اگه اشتباه نکنم این دو مقدار برای اینه که header بالای فرم حذف بشه :
Me.KeyPreview = True 'No Delete
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None 'No Delete

و زمانی که transepancy رو مقدار سفید میدی ، اون قسمتای سفید بک گراندُ حذف میکنه ؟

واقعا برنامه عالی بود ، ممنونم ... یه دنیا ممنون

فرید نجفلو
دوشنبه 15 اسفند 1390, 17:49 عصر
اگه اشتباه نکنم این دو مقدار برای اینه که header بالای فرم حذف بشه :

Me.KeyPreview = True'No Delete

این خط اصلا نباید حذف بشه و یا در properties فرم ست کنید
چون این خط واسه اینه که فرم به رویدادهای صفحه کلید جواب بده

Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None 'No Delete

این خط به شرطی می تونه حذف بشه که بک گراند و مقدار transepancy حذف بشن
این خط نوار عنوان و لبه های فرم رو حذف میکنه


و زمانی که transepancy رو مقدار سفید میدی ، اون قسمتای سفید بک گراندُ حذف میکنه ؟



بله درسته

kyrie-chan
دوشنبه 15 اسفند 1390, 18:30 عصر
خیلی ممنون ، میشه یه توضیح بدین که اینجا چرا تقسیم بر 4 کردین و این دستور چه کاری انجام میده ؟


Dim MaxStep AsInteger = Math.Min(Me.ClientSize.Width / 4, Me.ClientSize.Height / 4) 'Limit Step to have beter moving veiw

GetStep:--> این دقیقا چیه ؟( تابعه ؟ دستوره؟ یا ... )
و اینجا هم یه توضیح میدین که IsNumeric و CInt چی میگه ؟


If IsNumeric(StepSize) AndAlso StepSize > 0 AndAlsoCInt(StepSize) <= MaxStep Then
MoveSize = CInt(StepSize)

ببخشین هی سوال میپرسم ها

فرید نجفلو
دوشنبه 15 اسفند 1390, 19:36 عصر
خیلی ممنون ، میشه یه توضیح بدین که اینجا چرا تقسیم بر 4 کردین و این دستور چه کاری انجام میده ؟


تو این خط من خواستم کاربر رو محدود کنم به دلایل زیر:
1-اگه کاربر عددی بیش از ارتفاع و یا عرض فرم بده وقتی دکمه بخواد جابه جا شه حرکتش عجیب غریب می شه(مهم ترین دلیل)
2-حالا چرا تقسیم بر چهار: چون این یه عددی در میاد که با اون میشه جهت حرکت دکمه رو دید!
البته تو کامنتش توضیح دادم:محدود کردن برای داشتن نمایه بهتر


GetStep:--> این دقیقا چیه ؟( تابعه ؟ دستوره؟ یا ... )


به به!!!
اینکه دیگه!!:متفکر:
این یک برچسب (Lable) هست که می تونی با دستور GoTo به اون جهش بکنی
در واقع وقتی کاربر یک مقدار نا معتبر وارد می کنه من ازش می خوام دو باره وارد کنه یا کنسل کنه( رشته خالی)
البته چون این مغایر با اصول برنامه نویسی ساخت یافته ست نباید زیاد از اون استفاده کنید


و اینجا هم یه توضیح میدین که IsNumeric و CInt چی میگه ؟


با IsNumeric چک می کنیم ببینیم اونی که دریافت کردیم یک عدد یا نه ( که از اسمش هم معلومه)
و CInt مقدار ورودی رو به یک Integer (عدد صحیح) تبدیل می کنه


ببخشین هی سوال میپرسم ها
خواهش می کنم
باز هر سعالی داشتی بفرما

یه سوال:
تو VB.NET تازه کارید یا ک کلا برنامه نویسی؟
(واسه این می خوام بدونم که وقتی توضیح می دم با چه سطحی توضیح بدم):چشمک:

kyrie-chan
دوشنبه 15 اسفند 1390, 20:34 عصر
من کلا تازه کارم ، از هر چیزی در حد مقدمه به ما یاد دادن ....
خیلی خوب توضیح میدین ، حتما در آینده ای نزدیک استاد میشین ( شاید همین الانم باشین . )

میتونیم تو برنامه کاری بکنیم که هر بار که دکمه move میشه ، رنگ دکمه ، رندوم عوض شه ؟
راستی استاد ما میگفت زمانی که این دکمه هه تا نصفه میره بیرون ، نصفه بیرون از اونوره کادر دیده بشه ( چقدر سخت گیره ها این استاده ، 1 روز وقت داده این همه چیز از ما خواسته :دی ) و خودش هم میگفت برای این کار یک دکمه جدید تولید بشه و این جور چیزا ...
راستی برای قسمت گرافیکی کردن فرم ، جایی رو میشناسین که از پایه آموزش بده ...
( اینا برای اطلاعات بیشتره )
بازم ممنون ... بس که هر وقت میام سوال میپرسم ، سوالام پاک میشه ، این بار هم نا امید زدم سوالُ ولی پاک نشد و شما جواب دادی ... کلی امیدوار شدم

فرید نجفلو
دوشنبه 15 اسفند 1390, 21:01 عصر
میتونیم تو برنامه کاری بکنیم که هر بار که دکمه move میشه ، رنگ دکمه ، رندوم عوض شه ؟
راستی استاد ما میگفت زمانی که این دکمه هه تا نصفه میره بیرون ، نصفه بیرون از اونوره کادر دیده بشه ( چقدر سخت گیره ها این استاده ، 1 روز وقت داده این همه چیز از ما خواسته :دی ) و خودش هم میگفت برای این کار یک دکمه جدید تولید بشه و این جور چیزا ...


راستشو بخوای دقیقا هر دو این کارا رو می خواستم بکنم ولی به این دلیل دست نگه داشتم:



فقط کد ها ساده باشن که من مبتدی درکش کنم


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


منظورتون اگه زیبا تر کردنه فرم و کنترل هاست باید از کومپوننت ها استفاده کنید(تو سایت جستجو کنید پیدا می کنید)
مثلا DotNetBar :
آموزش کنترل های پر کاربرد بسته ی DevComponents (http://barnamenevis.org/showthread.php?322974-آموزش-کنترل-های-پر-کاربرد-بسته-ی-DevComponents)


بازم ممنون ... بس که هر وقت میام سوال میپرسم ، سوالام پاک میشه ، این بار هم نا امید زدم سوالُ ولی پاک نشد و شما جواب دادی ... کلی امیدوار شدم

ببینید الان که ما داریم اینجا بحث می کنیم شما باید یه تاپیک دیگه میزدید که نزدید!
شما باید اول قوانین سایت بعد قوانین زدن تاپیک ، پرسیدن سوال و جواب دادن رو بدونید تا با مشکل مواجه نشید
اینا رو بخونید بد نیست:

قوانین سایت (http://barnamenevis.org/misc.php?do=showrules)
چگونه بپرسیم؟ (http://barnamenevis.org/content.php?7-چگونه-بپرسیم؟)
راهنما (http://barnamenevis.org/faq.php)

shadi khanum
دوشنبه 15 اسفند 1390, 21:03 عصر
دوست عزیز این Sample رو ببینید. هم کامل و هم از این چیزی که میخواید بیشتر. یعنی کاربر هم امکام جابجایی داره و هم تغییر سایز
موفق باشی
http://www.codeproject.com/Articles/30836/The-Dragable-Container

kyrie-chan
دوشنبه 15 اسفند 1390, 21:43 عصر
راستشو بخوای دقیقا هر دو این کارا رو می خواستم بکنم ولی به این دلیل دست نگه داشتم:
منظورتون اگه زیبا تر کردنه فرم و کنترل هاست باید از کومپوننت ها استفاده کنید(تو سایت جستجو کنید پیدا می کنید)
مثلا DotNetBar :
آموزش کنترل های پر کاربرد بسته ی DevComponents (http://barnamenevis.org/showthread.php?322974-آموزش-کنترل-های-پر-کاربرد-بسته-ی-DevComponents)
ببینید الان که ما داریم اینجا بحث می کنیم شما باید یه تاپیک دیگه میزدید که نزدید!
شما باید اول قوانین سایت بعد قوانین زدن تاپیک ، پرسیدن سوال و جواب دادن رو بدونید تا با مشکل مواجه نشید
اینا رو بخونید بد نیست:
قوانین سایت (http://barnamenevis.org/misc.php?do=showrules)
چگونه بپرسیم؟ (http://barnamenevis.org/content.php?7-چگونه-بپرسیم؟)
راهنما (http://barnamenevis.org/faq.php)


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

اما به نظرتون بهتر نیست به جای زن هی تاپیک جدید ، که اینجوری سرچ کردن برای یکی که جدید میاد و می خواد از مطالب استفاده کنه سخت میشه ؟ ( البته شایدم قبول ندارین یا کلا این مطلب به این تاپیک مربوط نیست ) کلا ممنونم ، خیلی کمک بزرگی کردین

فرید نجفلو
دوشنبه 15 اسفند 1390, 22:05 عصر
از لطفتون بی نهایت ممنونم ، ولی باور کنین من در انجمن های دیگه همیشه بی مشکل بودم ( البته برنامه نویسی نبوده ) و قوانین رو خوندم و میدونم ... بازم قوانین اینجا رو مطالعه می کنم ...

اما به نظرتون بهتر نیست به جای زن هی تاپیک جدید ، که اینجوری سرچ کردن برای یکی که جدید میاد و می خواد از مطالب استفاده کنه سخت میشه ؟ ( البته شایدم قبول ندارین یا کلا این مطلب به این تاپیک مربوط نیست ) کلا ممنونم ، خیلی کمک بزرگی کردین

به نظرتون سوال شما با Drag & Drop مرتبط بود؟ ( اگه من از حالت Skin استفاده نمی کردم)
و ممکنه اگه یکی بخواد به شما جواب بده بیاد و کل پستهایی که فرستاده شدن بخونه بعد ببینه تاپیک مال یه سال پیش بوده و شوال اصلی آخره تاپیکه!!!
و در ضمن شما واسه سوالتون یه تاپیک دیگه هم زدید که مخالف قوانینه!(اعدامت میکنن :قهقهه:)


اون دو تا کاری که می خواستی تونستی انجام بدی؟

kyrie-chan
دوشنبه 15 اسفند 1390, 22:48 عصر
به نظرتون سوال شما با Drag & Drop مرتبط بود؟ ( اگه من از حالت Skin استفاده نمی کردم)
و ممکنه اگه یکی بخواد به شما جواب بده بیاد و کل پستهایی که فرستاده شدن بخونه بعد ببینه تاپیک مال یه سال پیش بوده و شوال اصلی آخره تاپیکه!!!
و در ضمن شما واسه سوالتون یه تاپیک دیگه هم زدید که مخالف قوانینه!(اعدامت میکنن :قهقهه:)


اون دو تا کاری که می خواستی تونستی انجام بدی؟

نه من از این کد استفاده میکنم اما جواب نمیده :
Dim Rnd As New Random()
btnMover.BackColor = Color.FromArgb(Rnd.Next(0, 256), Rnd.Next(0, 256), Rnd.Next(0, 256))

و برای اون یکی دیگه هم ، نمیتونم کاری کنم ، دو دکمه همزمان حرکت کنن ...

kyrie-chan
دوشنبه 15 اسفند 1390, 22:53 عصر
بازم بابت کمکا ممنون . فعلا شب خوش ... فردا ایشالا دوباره میام سراغش ... فعلا با همینا به استاد بدم از سرشم زیادیه

فرید نجفلو
دوشنبه 15 اسفند 1390, 23:20 عصر
از این کد استفاده کن
Dim rnd As New Random()
Dim bytes(3) As Byte
rnd.NextBytes(bytes)
btnMover.BackColor = Color.FromArgb(bytes(0), bytes(1), bytes(2), bytes(3))

kyrie-chan
دوشنبه 15 اسفند 1390, 23:26 عصر
اینجا ارور میده :
NextBytes(bytes)
میگه
Error 1 Array bounds cannot appear in type specifiers.

فرید نجفلو
سه شنبه 16 اسفند 1390, 00:02 صبح
یعنی کد منو گذاشتی این خطا رو داد؟
من همونو تست کردم فرستادم

kyrie-chan
سه شنبه 16 اسفند 1390, 00:04 صبح
آره من همین گذاشتم .... تو چه خطی بذارمش؟

فرید نجفلو
سه شنبه 16 اسفند 1390, 00:08 صبح
آره من همین گذاشتم .... تو چه خطی بذارمش؟

آخر کدی که دکمه رو جابجا می کنه
اگه یکم صبر کنی برنامه رو اصلاح می کنم می فرستم

kyrie-chan
سه شنبه 16 اسفند 1390, 00:16 صبح
آها درست شد من اشتباه میذاشتم

فرید نجفلو
سه شنبه 16 اسفند 1390, 00:28 صبح
ضمیمه اصلاح شد دو باره دانلود کن
83726

فکر کنم اینو دیگه بپسندی:چشمک:
20 نگیری میونمون به هم می خوره ها

kyrie-chan
سه شنبه 16 اسفند 1390, 00:31 صبح
خیلی ممنون ، کلی زحمت کشیدی ... قول میدم از 20 بیشتر بگیرم