PDA

View Full Version : استفاده از یک ایونت برای چند کنترل



twelve
دوشنبه 04 تیر 1386, 14:52 عصر
سلام ، من یه فرم دارم که پر از textbox هستش و میخوام برای اونا رویداد مشابه رو بنویسم
(مثلا یه رویداد gotfocus ) اما خب تعدادشون خیلی زیاده و اگر بخوام واسه تک تکشون این رویداد رو بنویسم که ..... :گیج:
من خودم فکر میکنم که حتما راهی هست ( مثل css توی وب )
چیزی که به ذهن من میرسه استفاده از یه تابع هست یا استفاده از وراثت!! آیا درسته ؟
اگر هست یه کم راهنماییم کنین اگر هم درست نیست روش درست رو به من بگین ، مرسی

Bisavad_Moshtagh
دوشنبه 04 تیر 1386, 15:25 عصر
در بخش انتهایی هر رخداد کلمه Handles رو میبینید؟
این کلمه بیان میکنه که چه کنترلی این رخداد رو اجرا کنه
بعدش هم نام کنترل و رخداد هستش مثل btnLeft.Click
شما کافیه که نام کنترلتون رو با رخداد مورد نظر آخر این خط اضافه کنید مثلا:

Handles btnleft.click,btnright.click,txtname.gotfocus

mehdi.mousavi
دوشنبه 04 تیر 1386, 15:34 عصر
سلام ، من یه فرم دارم که پر از textbox هستش و میخوام برای اونا رویداد مشابه رو بنویسم
(مثلا یه رویداد gotfocus ) اما خب تعدادشون خیلی زیاده و اگر بخوام واسه تک تکشون این رویداد رو بنویسم که ..... :گیج:
من خودم فکر میکنم که حتما راهی هست ( مثل css توی وب )
چیزی که به ذهن من میرسه استفاده از یه تابع هست یا استفاده از وراثت!! آیا درسته ؟
اگر هست یه کم راهنماییم کنین اگر هم درست نیست روش درست رو به من بگین ، مرسی

سلام.
برای اینکار باید توی یه حلقه و بازای دونه دونه کنترلهایی که تو Controls Collection فرم هستن، event مورد نظرتون رو رجیستر کنید. من VB بلد نیستم اما کد معادلش در C# رو براتون می نویسم:


private void RegisterEvents(Control.ControlCollection controls)
{
foreach (Control ctrl in controls)
{
if (ctrl.HasChildren)
RegisterEvents(ctrl.Controls);

if (!ctrl.TabStop)
continue;

ctrl.GotFocus += new EventHandler(ctrl_GotFocus);
}
}

void ctrl_GotFocus(object sender, EventArgs e)
{
}



بعدش توی OnLoad میتونید تابع بالا رو صدا کنید.

twelve
دوشنبه 04 تیر 1386, 15:38 عصر
جناب bisavad_moshtagh خب این هم دقیقا میشه همون راه حمالی! ببینید من میخوام به فرم حالی کنم که هر جا textbox بود ، یه رویداد رو براش اجرا کنه! مثلا اینجوری



Dim Cll as new Collection
Cll= Controls
if typeof cll is textbox then
if cll.text= "" then
messagebox.show
end if


من این چنین کدی رو مینویسم مثلا برای نمایش پیغام ، اما الان میخوام بجای نمایش پیغام ، یه رویداد خاص اجرا بشه!



کد:
private void RegisterEvents(Control.ControlCollection controls) { foreach (Control ctrl in controls) { if (ctrl.HasChildren) RegisterEvents(ctrl.Controls); if (!ctrl.TabStop) continue; ctrl.GotFocus += new EventHandler(ctrl_GotFocus); } } void ctrl_GotFocus(object sender, EventArgs e) { }
فکر کنم این همونه که من میخوام اما من این رو درست متوجه نمیشم ، میشه به vb ترجمه کنین؟!!

eyes_shut_number1
دوشنبه 04 تیر 1386, 17:03 عصر
Private Sub RegisterEvents(Byval controls As control.controlcollection)
for each ctrl in controls
if ctrl.Hashchildren then
registerevents(ctrl.controls)
end if
if Not ctrl.tabstop then

end if
ctrl.goftFocus=ctrl.gotFocus + new EventHandler(ctrl_gotFocus)
next
end sub

sub ctrl_GotFocus(byval sender as object, byval e as EventArgs)
end sub

'Fekr mikonam in beshe

ab_ba
دوشنبه 04 تیر 1386, 17:35 عصر
if Not ctrl.tabstop then
else
sub ctrl_GotFocus(byval sender as object, byval e as EventArgs)
end if

__H2__
سه شنبه 05 تیر 1386, 10:32 صبح
سلام
میبخشید کاربر eyes_shut_number1 (http://www.barnamenevis.org/forum/member.php?u=38140)، اما فکر کنم کد شما در VB.Net درست عمل نکند!
من بودم این کد را ترجیح میدادم! و کافیست در رویداد Form_Load اشاره گر Me را به آن پاس دهید.


Private Sub RegisterEvents(ByVal control As System.Windows.Forms.Control)
For Each c As System.Windows.Forms.Control In control.Controls
If c.HasChildren Then
RegisterEvents(c)
ElseIf TypeOf c Is System.Windows.Forms.TextBox Then
AddHandler c.GotFocus, AddressOf Ctrl_GotFocus
EndIf
Next
End Sub

Sub Ctrl_GotFocus(ByVal sender As Object, ByVal e As EventArgs)
'...AnyCode
End Sub

eyes_shut_number1
سه شنبه 05 تیر 1386, 10:47 صبح
Man faghat code doste aziz mehdi ro tarjomekardam
hala ya ishon eshtbah zadam ya begofteye shoma bande
mamnon _h2_

__H2__
چهارشنبه 06 تیر 1386, 15:52 عصر
سلام

Man faghat code doste aziz mehdi ro tarjomekardam
hala ya ishon eshtbah zadam ya begofteye shoma bande
mamnon _h2_
مشکل خاصی نبوده، صرفاً یک خط کد زیر در #C صحیح است:


ctrl.GotFocus += new EventHandler(ctrl_GotFocus);

ولی معادل ان در VB.Net این میشود:


AddHandler c.GotFocus, AddressOf Ctrl_GotFocus

ایراد اصلی فقط در همین تک خط تبدیل شده بوده! :بوس:

موفق باشید.