PDA

View Full Version : حرفه ای: sender , e



tabatabaeefar
چهارشنبه 29 مهر 1388, 09:09 صبح
سلام دوستان
دوتا سئوال داشتم.
1-اگه كد يه رويداد مثل كليك رو خودم بنويسم چطور ميشه از e در اين رويداد استفاده كرد؟
2-توي رويداد ها sender چكار ميكنه؟

Hossis
چهارشنبه 29 مهر 1388, 09:36 صبح
اول جواب سوال دوم:
sender اشاره به همان کنترلی هست که این رویداد رو پاس کرده مثلا اگر یک Button داشته باشی و روش کلیک کنید،‌ Sender در رویداد Button_Click همان Button است لذا اگر در ذیل آن بنویسید
msgbox (Sender.Name)
نام دکمه فرمان در جعبه پیام خواهد آمد
اما سوال اول:
هنگامی که رویداد رو طراحی می کنید( RiseEvent) باید نام کنترل مورد نظر را برای Sender وارد کنید و به جای e هم بنویسید New Eventargs ؛ به عنوان مثال این طور بنویسید

Sub Form_Click
RaiseEvent Click(me,New Eventargs)
End sub

مهدی نان شکری
چهارشنبه 29 مهر 1388, 09:40 صبح
با سلام
من منظورتون در در مورد اول دقیق متوجه نشدم اگه ممکن باشه کمی بیشتر توضیح بدبد.
EventArgs در واقع اطلاعاتی در مورد رویداد به شما میدهد.
مثلا در رویداد SelectedIndexChanged دیتا گرید index جدید را به ما برمی گردونه.
Sender هم در واقع یک اشاره گر به Objectای هست که موجب ایجاد رویداد شده. مثلا دکمه یا ...

tabatabaeefar
چهارشنبه 29 مهر 1388, 10:32 صبح
هر چي سعي كردم نشد.
من ميخواهم يه textBox روي فرم ايجاد كنم و براش رويداد KeyDown بنويسم.
كه هر وقت داخل TextBox چيزي تايپ ميشده e.KeyCode اون رو توي يه Label نمايش بدم.
اگه امكان داره يه كد برام بگذاريد.
راستي آيا ميشه به غير از e , Sender رويداد ورودي ديگه ايي داشته باشه(مثلا يه مقدار String )؟
ممنون.

Hossis
چهارشنبه 29 مهر 1388, 10:51 صبح
حواب اول:


Private Sub TextBox1_KeyDown(ByVal sender AsObject, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
Label1.Text = e.KeyValue.ToString
EndSub

جواب دوم:
میشه غیر از اون دو هم گذاشت منتها باید از قبل (هنگام طراحی رویداد) آن را تعریف کرده و مقدارش را مشخص کنید مثلا به این صورت می تونید یک رویداد طراحی کنید


Private Event clide(ByVal sender As Object, ByVal e As EventArgs, ByVal str AsString)
Private Sub TextBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Click
RaiseEvent clide(TextBox1, New EventArgs, TextBox1.Text)
End Sub

نکته : ممکنه تو کد بالا کلمات به هم چسبیده باشند که باید از هم جدا کنید!

tabatabaeefar
چهارشنبه 29 مهر 1388, 13:11 عصر
آقا دستت درد نكنه.
جواب اولت كه خيلي عالي بود.
ولي من چيزي از جواب دوم متوجه نشدم.
معني خط اول و سوم چيه؟
راستي توي خط دوم به TextBox1.Click اشكال ميگرفت.
اگه ميشه يه خورده هم درباره Event , RaiseEvent توضيح بديد.
بازم دستت درد نكنه.

Hossis
چهارشنبه 29 مهر 1388, 21:17 عصر
آقا دستت درد نكنه.
جواب اولت كه خيلي عالي بود.
ولي من چيزي از جواب دوم متوجه نشدم.
معني خط اول و سوم چيه؟
راستي توي خط دوم به TextBox1.Click اشكال ميگرفت.
اگه ميشه يه خورده هم درباره Event , RaiseEvent توضيح بديد.
بازم دستت درد نكنه.

خط اول برای تعریف یک رویداد بسان یک متغیر است یعنی همانطور که یک متغیر را مثلا از نوع متن تعریف می کنید، باید یک رویداد را هم تعریف کنید
خط سوم هم برای این است که مشخص کند کجا و کی این رویداد اتفاق بیفتد و چه باید بشود که بگوییم کلید(clide) شده (با توجه به مثال) در این مثال گفته ایم که وقتی در کادر متن کلید ماوس زده شد، رویداد قوق اتفاق بیفتد و RaiseEvnt یک کلمه کلیدی است که باید در این مواقع نوشته شود مثل کلمه کلیدی Call منتها این Call اختیاری است و اون یکی اجباری.
Event هم که به معنای رویداد است ، هر یک از کلیک، تغییر متن،‌فشردن کلیدهای ماوس ، فشردن کلیدهای صفحه کلید ، تغییر رنگ زمینه ،‌ درگ و ... همه رویدادهائی هستند که در کنترل های مختلف از اون استفاده می شود.