PDA

View Full Version : کلیک کردن یک دکمه در برنامه



hossein-khoshseyar
چهارشنبه 12 مهر 1391, 16:52 عصر
سلام
دوستان چه طوری می تونم یه دکمه دیگه توی برنامه خودم رو کلیک کنم
دقت کنید که نمی خوام تابع اون دکمه رو صدا بزنم
می خوام واقعا یه جوری کلیک اون دکمه رو شبیه سازی کنم
که با کلیک اون دکمه اون تابع و بقیه کارای مربوط به کلیکش انام بشه
پیشاپیش ممنون از پاسختون

r. salehi
پنج شنبه 13 مهر 1391, 05:55 صبح
سلام دوست عزیز
روشی رو که میگم امتحان کنید امیدوارم به نتیجه برسید
همون طوری که می دونید سابروتین هایی که برای رویدادها ایجاد میشند یک سری پارامتر دارند. مثلا رویداد کلیک به شکل زیر هست

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
End Sub

خیلی از موارد در رویدادی مانند کلیک ما به اون پارامترهای داخل پرانتزها نیازی نداریم و در کدی که بین دو خط فوق می نویسیم از پارامترهای sender , e استفاده نمی کنیم. اگر شما هم کدتون از e و sender استفاده ای نمیکنه، به راحتی میتونید اونها رو پاک کنید تا پرانتزها خالی بشند.
خوب با خالی شدن پرانتز ها شما قادر خواهید بود سابروتین Button1_Click رو در هر جایی که خواستید مثل یک سابروتین ساده فراخوانی کنید تا کد داخل اون اجرا بشه. مثل زیر:


Private Sub Button1_Click() Handles Button1.Click
MsgBox("test")
End Sub


حالا برای فراخوانی سابروتین در هر جایی دیگه، طوری که مثلا کاربر دکمه رو فشار داده می تونید تایپ کنید


Button1_Click()

hossein-khoshseyar
پنج شنبه 13 مهر 1391, 10:15 صبح
دوست عزیز ممنون از پاسخت
ولی این رو که خودم گفتم نمی خوام این ابتدایی ترین روش ممکن بود که شما گفتید و من هم در سئوال گفتم که نمی خوام از این روش استفاده کنم
بزارید سئوالمم رو واضح تر بگم
فرض کند که من رویداد کلیک دکمه یک رو به دو تا تابع هندل کردم

Private Sub test1 (sender As Object, e As EventArgs) Handles Button1.Click
'
'
End Sub

Private Sub test2 (sender As Object, e As EventArgs) Handles Button1.Click
'
'
End Sub




اگه دقت کنید هر دو تا تابع فوق با کلیک کردن دکمه یک اجرا میشه
الان من وسط کدم می خوام نرم افزاری یه جوری بگم که کلید یک کلیک شد
نمی خوام دو تا تابع رو جدا جدا فراخوانی کنم
می خوام با کلیک باتن یک یه کاری کنم که هر دو تابع اجرا بشن
این طوری اگه من کلیک دکمه یک رو روی 10 تا تابع دیگه هم هندل کنم
اون وقت هر وقت بخوام نرم افزاری دکمه یک رو کلیک کنم با یه تابع همشون اجرا میشن
سئوالم رو فکر کنم واضح مطرح کردم
لطفا اگه کسی در این زمینه اطلاعاتی داره راهنماییم کنه
ممنون

amirzandi
پنج شنبه 13 مهر 1391, 12:48 عصر
فکر کنم با jQuery بتونین واقعا موس را تکون بدین و ببرینش به Position که دکمه هست ، بعد هم کلیک کنید...

hossein-khoshseyar
دوشنبه 01 آبان 1391, 10:49 صبح
دوست عزیز من منظورم فقط رویداد کلیک یک دکمه نیست
سئوالم رو کلی بپرسم

فرض کنید یه کنرل ده تا ایونت داره که هر ایونتی به موقع خاص فراخوانی میشه

حالا یه جایی توی برنامه ما می خوایم ایونت فلان چیزشون رو شبیه سازی کنیم
یعنی یه کاری کنیم که مثلا فلان ایونتش اومده
همیشه نمیشه با حرکت دادن موس یهایونت رو ایجاد کرد
مثلا فرض کنید من الان میخوام ایونت لود شدن عکس رو از پیکچر باکس شبیه سازی کنم
لطفا راهنماییم کنید

xxnagin
دوشنبه 01 آبان 1391, 13:15 عصر
سلام
نمیدونم دقیقا منظورتون چیه حداقل امکان یه نمونه ای که تو نرم افزار های مختلف دیدی
یا یه پروژه خودت
من اینو برات گذاشتم

Private Sub test1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox("test1")
End Sub
Private Sub test2(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox("test2")
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Me.Button1.PerformClick()
End Sub

hossein-khoshseyar
شنبه 06 آبان 1391, 15:23 عصر
سلام
نمیدونم دقیقا منظورتون چیه حداقل امکان یه نمونه ای که تو نرم افزار های مختلف دیدی
یا یه پروژه خودت
من اینو برات گذاشتم

Private Sub test1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox("test1")
End Sub
Private Sub test2(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox("test2")
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Me.Button1.PerformClick()
End Sub



دوست گرامی
دقیقا منظورم همینه که می گی
و نوشتی
این کدی که نوشتی برای ماوس کلیک درسته
یعنی از PerformClick() استفاده کردی
ولی این تابع برای بقیع ایونت ها که چنین چیزی وچود ندارد


مثلا میگم فرض کن وسط کدهات الان به این نتیجه رسیدی که باید رخداد موس آپ فلان تکست باکس اتفاق بیفته
شما چطوری این ایونت رو ایجاد می کنید

ما چه طور می توینم با دستور rise err به شکل نرم افزاری یک خطا ایجاد کنیم
حالا می خوام بدونم چه طور یه ایونت رو ایجاد کنیم
امیدوارم منظورم رو فهمیده باشید

gilsoft
شنبه 06 آبان 1391, 16:03 عصر
حالا می خوام بدونم چه طور یه ایونت رو ایجاد کنیم
امیدوارم منظورم رو فهمیده باشید

سلام دوست عزیز

فکر کنم که شما باید از AddHandler استفاده کنید

تو همین تالار AddHandler رو جستجو کن به نتیجه میرسی ...

موفق باشید

hossein-khoshseyar
شنبه 06 آبان 1391, 16:27 عصر
سلام دوست عزیز

فکر کنم که شما باید از AddHandler استفاده کنید

تو همین تالار AddHandler رو جستجو کن به نتیجه میرسی ...

موفق باشید
'گرامی
AddHandler برای اضافه کردن یک تابع برای یک رخداد هست نه این چیزی که من می خوام

برای چندمین بار سعی می کنم که مثالی واضح بزنم تا سئوالم مفهوم باشه

فرض کنید ما یه تکست باکس داریم که توی ایونت mouseup اون یه کدی رو نوشتیم
حالا یه دکمه هم داریم که می خوام هر وقت روی اون کلیک کردیم ایونت mouseup اون تکست باکس اجرا بشه
(بدون صدا زدن مستقیم تابع ایونت mouseup )
حالا دیگه فکر کنم سئوالم واضح واضح باشه
لطفا راهنماییم کنید

gilsoft
شنبه 06 آبان 1391, 16:58 عصر
حالا یه دکمه هم داریم که می خوام هر وقت روی اون کلیک کردیم ایونت mouseup اون تکست باکس اجرا بشه دوست عزیز فکر کنم منظور شما اینه که رخداد MouseUp اتفاق بیوفته

آیا درست عرض میکنم ؟

فرید نجفلو
یک شنبه 07 آبان 1391, 02:13 صبح
اگه واقعا لازمه که این کار رو بکنید من یه راه حل دارم که از یه جنبه سخت (کلاس نویسی) و از جنبه ای راحت (نحوه استفاده) هست
شما برای اون دکمه های مورد نظرتون یا همه دکمه ها می تونید یه کلاس از Button مشتق کنید و از اون نمونه سازی کنید
تو این کلاس باید یک سری متد ها رو تغییر اسکوپ بدید (البته کارای سفارشی دیگه ای هم می تونید توش بکنید)
برای شما MousUp و MouseDown رو مثالش رو می نویسم

کلاس مشتق شده:


Public Class CostumBtn
Inherits Button

Public Sub DoMouseUp(mevent As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseUp(mevent)
End Sub

Public Sub DoOnMouseDown(mevent As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseDown(mevent)
End Sub
End Class


حالا شما با Rebuid یا اجرای برنامه می تنید اون کنترل تو Toollbox ببینید ، اگه اون رو داخل فرم بکشید یه دکمه معمولی با همون امکانات (البته در ظاهر) به فرم اضافه می شه

حالا شما می تونید هر جایی با کدی مثل این کارتون رو انجام بدید:


Dim New_e As New MouseEventArgs(Windows.Forms.MouseButtons.Left, 1, 10, 10, 0)

Form1.CostumBtn1.DoMouseUp(New_e)
Form1.CostumBtn1.DoOnMouseDown(New_e)

'داخل خود فرم
Me.CostumBtn1.DoOnMouseDown(New_e)


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

hossein-khoshseyar
یک شنبه 07 آبان 1391, 09:50 صبح
ممنون دوست عزیز هنوز این رو تست نکردم
ولی روش جالبی بود
توضیحاتت کامل بود
البته این رو هم بگم من به عنوان نمونه mouseup رو مثال زدم
سئوال من کلی بود و اون هم این بود که چطور می تونیم یک رویداد از یک کنترل رو نرم افزاری ایجاد بکنیم
در هر صورت ممنون از پاسخت

ehsanvb
چهارشنبه 16 مرداد 1392, 15:10 عصر
من هم این مشکل رو داشتم که با یه روش ساده حلش کردم
ممکنه حرفه ای نباشه ولی کار راه بندازه :لبخند:

Button12.Focus()
SendKeys.Send("{ENTER}")