ورود

View Full Version : سوال: نحوه تعریف رویداد



Machinarium
یک شنبه 01 مرداد 1391, 21:43 عصر
سلام دوستان .
می خواستم یه رویداد تعریف کنم که با تغییر زمان (ثانیه جاری سیستم) کار کنه تقریبا شبیه به تایمر . ایا امکانش هست ؟ لطفا راهنمایی کنید .

JaVa
یک شنبه 01 مرداد 1391, 21:49 عصر
سلام دوستان .
می خواستم یه رویداد تعریف کنم که با تغییر زمان (ثانیه جاری سیستم) کار کنه تقریبا شبیه به تایمر . ایا امکانش هست ؟ لطفا راهنمایی کنید .

خوب چرا از خود کنترل Timer ویژوال بیسیک استفاده نمی کنی ؟؟؟
رویدادش هم Timer1_Tick هست.

Machinarium
یک شنبه 01 مرداد 1391, 22:17 عصر
خوب چرا از خود کنترل Timer ویژوال بیسیک استفاده نمی کنی ؟؟؟
رویدادش هم Timer1_Tick هست.

دوست عزیز حرف شما درسته . اما من می خوام که تعریف رویداد رو یاد بگیرم

JaVa
یک شنبه 01 مرداد 1391, 22:22 عصر
تعریف رویداد رو یاد بگیرم

منظورت اینه که می خوای خودت یه رویداد جدید بنویسی ؟! که توی رویداد های کنترل تایمر نباشه؟

Machinarium
یک شنبه 01 مرداد 1391, 22:31 عصر
منظورت اینه که می خوای خودت یه رویداد جدید بنویسی ؟! که توی رویداد های کنترل تایمر نباشه؟

کلا می خوام نحوه تعریف کردن رویداد رو یاد بگیرم . مثل رویداد فرم لود

the king
یک شنبه 01 مرداد 1391, 23:30 عصر
کلا می خوام نحوه تعریف کردن رویداد رو یاد بگیرم . مثل رویداد فرم لود

رخداد Load فرم یک رخداد ای که از قبل تعریف شده و شما صرفا باید کد ای بنویسید که وقتی فراخوانی شد کاری انجام بده، به دو طریق، در روش اول
عبارت Handles مشخص می کنه که فلان متد باید با فلان رخداد فراخوانی بشه :

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

این روش وقتی قابل استفاده است که اون کلاس (فرضا MyBase) موقع نوشتن کد در دسترسه. این روش پیشفرض ویرایشگر کد ویژوال استدیو ئه.

اما گاهی شما قراره شیء رو موقع اجرا بسازید و موقع نوشتن کد هنوز در دسترس نیست، دیگه اینجور مواقع Handles استفاده نمیشه.
در مثال زیر داخل فرم Form1 فرم Form2 ای ایجاد میشه که رخداد Load اش به متد Sample وصله و فراخوانی اش می کنه. یعنی در کلاس Form1
رخداد Load فرم Form2 را نوشته ایم و مدیریت می کنیم :

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim f2 As New Form2()
AddHandler f2.Load, AddressOf Sample
f2.Show()
End Sub

Private Sub Sample(ByVal sender As System.Object, ByVal e As System.EventArgs)
MessageBox.Show("Form2 Loaded.")
End Sub

ROSTAM2
دوشنبه 02 مرداد 1391, 01:22 صبح
سلام دوستان .
می خواستم یه رویداد تعریف کنم که با تغییر زمان (ثانیه جاری سیستم) کار کنه تقریبا شبیه به تایمر . ایا امکانش هست ؟ لطفا راهنمایی کنید

اگر قصد داريد شيئي جديد ساخته و براي آن رويداد ايجاد كنيد كافيست در قسمت ClassDeclaration با دستور Event يك نام براي رويداد انتخاب و در صورت لزوم مي توانيد براي آن پارامتر ايجاد كنيد

مثال:

Event MyEvent1(ByVal Sender As Object,ByVal e As system.EventArgs)


براي بكارگيري رويداد از دستور RaiseEvent و نام و پارامترهاي آن:

مثال بالا آوردن رويداد با استفاده آن در رويداد يك كليد در شئ:

RaiseEvent MyEvent1(Sender,e)


اما اگر در شئ خودتان (UserControl) يك تايمر داشته باشيد بخواهيد رويداد Tick را براي رويدادي كه خودتان ساخته اسد همراه سازيد اين دستور را در اين رويداد بنويسيد

در ضمن ميتوان براي شئ DefaultEvent‌ هم تعيين كرد...

Machinarium
دوشنبه 02 مرداد 1391, 13:31 عصر
اگر قصد داريد شيئي جديد ساخته و براي آن رويداد ايجاد كنيد كافيست در قسمت ClassDeclaration با دستور Event يك نام براي رويداد انتخاب و در صورت لزوم مي توانيد براي آن پارامتر ايجاد كنيد

مثال:

Event MyEvent1(ByVal Sender As Object,ByVal e As system.EventArgs)


براي بكارگيري رويداد از دستور RaiseEvent و نام و پارامترهاي آن:

مثال بالا آوردن رويداد با استفاده آن در رويداد يك كليد در شئ:

RaiseEvent MyEvent1(Sender,e)


اما اگر در شئ خودتان (UserControl) يك تايمر داشته باشيد بخواهيد رويداد Tick را براي رويدادي كه خودتان ساخته اسد همراه سازيد اين دستور را در اين رويداد بنويسيد

در ضمن ميتوان براي شئ DefaultEvent‌ هم تعيين كرد...


خیلی ممنون از جواب شما فقط دستور
RaiseEvent MyEvent1(Sender,e)
رو کجا تعریف کنم به که رویداد دیگه ای وابسته نباشه

ROSTAM2
دوشنبه 02 مرداد 1391, 14:39 عصر
در شئي كه شما مي سازيد اين دستور و به كارگيري آن در رويدادي ديگر الزاميست چرا كه براي استفاده از شئ هنگام طراحي و بكار گيري آند در يك فرم شما با انتخاب رويداد ساخته دست خودتان مانند رويدادهاي ديگر از اشياء ديگر روبرو خواهيد شده كه اگر رويداد شما در هنگام ساخت شئ Raise نشود هيچ عكس العملي نشان داده نخواهد شد

يك UserControl به پروژه تان اضافه كرده در آن يك كليد (Button) اضافه كنيد
يك رويداد تعريف كنيد:


Event ButtonXClicked(Sender,e)


آن را با استفاده از رويداد كليك از كليد Raise كنيد


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
RiseEvent ButtonXClicked(Sender,e)
End Sub


حال پروژه را يكبار Build كرده و در Toolbox دنبال شيئي كه ايجاد كرده ايد بگرديد (همان UserControl) و به فرم اضافه كنيد شئ را انتخاب رو ي آن دابل كليك كنيد اگر DefaultEvent را رويدادي كه خودتان ايجاد كرده ايد قرارداده باشيد بصورت پيشفرض با اين رويداد مواجه خواهيد شد و الا بايد از قسمت Procedures رويداد مد نظر را يافته و انتخاب كنيد


Private Sub UserControlX_ButtonXClicked(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles UserControlX.ButtonXClicked
' Statements
End Sub

Machinarium
دوشنبه 02 مرداد 1391, 14:58 عصر
در شئي كه شما مي سازيد اين دستور و به كارگيري آن در رويدادي ديگر الزاميست چرا كه براي استفاده از شئ هنگام طراحي و بكار گيري آند در يك فرم شما با انتخاب رويداد ساخته دست خودتان مانند رويدادهاي ديگر از اشياء ديگر روبرو خواهيد شده كه اگر رويداد شما در هنگام ساخت شئ Raise نشود هيچ عكس العملي نشان داده نخواهد شد

خیلی ممنون دوست عزیز . با توجه به کدی که شما نوشتید , رویداد "UserControlX_ButtonXClicked" تا زمانی که رویداد "Button1_Clicked" اجرا نشه کار نمیکنه و اجرا نمیشه یعنی این که وابسته به اون رویداد هست . حالا اگر ما بخواهیم یه رویداد مستقل تعریف کنیم باید چه کار کنیم ؟ مثلا رویدادی که وقتی خاصیت "Width" فرم تغییر کرد اتفاق بیفتد و مثل رویداد "Form Load" به هیچ رویداد دیگه ای وابسته نباشه .

ROSTAM2
دوشنبه 02 مرداد 1391, 15:52 عصر
دوست خوبم تمام اتفاقات (رويدادها) درون زبان هاي برنامه نويسي وابسته به رويدادي ديگرند كه تاكنون تكامل يافته و تغييراتي از ناحيه نام و كارايي پيدا كردن
همين Form.Load خود به تبعيت از رويدادي كه ما به آن در برنامه نويسي خود دسترسي نداريم اعمال مي شود

تغيير ابعاد فرم به رويداد Resize يا SizeChanged مرتبط است