تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيفية تنفيذ عملية في مسار آخر وإظهار النتيجة في التحكمات على النموذج
#2
نعود للنموذج الخاص بالمشروع الذي نحتاج لوجود صندوق نصوص وزرين عليه للقيام بتجربة الفئة الجديدة حيث سنقوم بتعريف متغير خاص على مستوى النموذج باسم MyTimer من نوع فئتنا MyStopWtach وباستخدام العبارة WithEvents التي ستمكننا من استقبال الأحداث التي ستطلقها فئتنا


كود :
Private WithEvents MyTimer As New MyStopWtach
وسيكون كود الزرين من أجل بدء وإيقاف المؤقت باستخدام فئتنا السابقة كما يلي


كود :
Private Sub Button1_Click() Handles Button1.Click
MyTimer.StartTimer()
End Sub

Private Sub Button2_Click() Handles Button2.Click
MyTimer.StopTimer()
End Sub
الآن أنشئ معالج للحدث ReturnVlaue العائد للمتغير MyTimer واجعله بحيث يكون الكود فيه كالتالي ثم جرب تشغيل البرنامج فستحصل على رسالة مشابهة للرسالة في بداية المقال


كود :
Private Sub MyTimer_ReturnValue(ByVal sender As Object, _
ByVal e As MyStopWtach.ReturnValueEventArgs) Handles MyTimer.ReturnValue

Me.TextBox1.Text = e.ReturnVlaue

End Sub
ولمعالجة هذه النقطة والتخلص من رسالة الخطأ سنحتاج لعمل Invoke للإجراء MyTimer_ReturnValue حتى نستطيع استخدام القيم المعادة منه في ضبط قيم خصائص التحكمات على النموذج وفي حالتنا هنا الخاصية Text لصندوق النصوص والعملية ببساطة ستتم كما يلي
في قسم المتغيرات العامة في النموذج سنقوم بتعريف إجراء مفوض Delegate يحمل نفس توقيع الإجراء MyTimer_ReturnValue وبدون جسم للإجراء كما يلي


كود :
Private Delegate Sub MyTimer_ReturnValueDelegate(ByVal sender As Object, _
ByVal e As MyStopWtach.ReturnValueEventArgs)
ويكون الكود الذي سينفذ المهمة بصورة صحيحة كما يلي


كود :
Private Sub MyTimer_ReturnValue(ByVal sender As Object, _
ByVal e As MyStopWtach.ReturnValueEventArgs) Handles MyTimer.ReturnValue

If Me.TextBox1.InvokeRequired = True Then
Dim d As New MyTimer_ReturnValueDelegate(AddressOf MyTimer_ReturnValue)
Me.Invoke(d, New Object() {sender, e})
Else
Me.TextBox1.Text = e.ReturnVlaue
End If
End Sub
حيث فحصنا قيمة الخاصية القابلة للقراءة فقط InvokeRequired لصندوق النصوص فإن كان False نقوم بضبط قيمة الخاصية Text باستخدام القيمة المعادة من الحدث مباشرة بدون أي مشاكل وإن كانت True عندها لن نستطيع ضبط القيمة مباشرة كي لا نحصل على الخطأ الوارد في بداية المقال عندها سنعرف متغير d من نوع الإجراء المفوض MyTimer_ReturnValueDelegate ونمرر له عنوان الإجراء MyTimer_ReturnValue ثم استخدمنا الطريقة Invoke العائدة للنموذج لتنفيذ نسخة آمنة من الحدث MyTimer.ReturnValue تمكننا من ضبط القيم المعادة إلى التحكمات وذلك بتمرير المتغير d كمحدد أول للخاصية Invoke ويكون المحدد الثاني للخاصية Invoke هو مصفوفة من النوع Object يتم تمرير محددات الإجراء MyTimer_ReturnValue كعناصر لها
وفيما يلي الكود الكامل للنموذج


كود :
Public Class Form1

Private Delegate Sub MyTimer_ReturnValueDelegate(ByVal sender As Object, _
ByVal e As MyStopWtach.ReturnValueEventArgs)

Private WithEvents MyTimer As New MyStopWtach

Private Sub Button1_Click() Handles Button1.Click
MyTimer.StartTimer()
End Sub

Private Sub Button2_Click() Handles Button2.Click
MyTimer.StopTimer()
End Sub

Private Sub MyTimer_ReturnValue(ByVal sender As Object, _
ByVal e As MyStopWtach.ReturnValueEventArgs) Handles MyTimer.ReturnValue

If Me.TextBox1.InvokeRequired = True Then
Dim d As New MyTimer_ReturnValueDelegate(AddressOf MyTimer_ReturnValue)
Me.Invoke(d, New Object() {sender, e})
Else
Me.TextBox1.Text = e.ReturnVlaue
End If
End Sub

End Class
}}}
تم الشكر بواسطة:


الردود في هذا الموضوع
كيفية تنفيذ عملية في مسار آخر وإظهار النتيجة في التحكمات على النموذج - بواسطة Raggi Tech - 05-10-12, 01:44 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Video [درس فيديو] حل مشكلة تغيير مسار قاعدة البيانات مع تقارير كريستال ريبورت رمضان272 1 2,477 25-10-24, 04:53 AM
آخر رد: رمضان272
Video [درس فيديو] تقارير الكريستال ريبورت وتغيير مسار الصور أثناء التشغيل رمضان272 0 2,000 28-03-22, 03:18 AM
آخر رد: رمضان272
  [سلسلة تعليمية] شرح تفصيلي وكامل عن كيفية الاتصال بسيكوال وعمل اتاش برمجي وجلب اسماء السيرفرات ابو انس 3 4,043 25-02-22, 12:44 AM
آخر رد: atefkhalf2004
  تنفيذ كود vb.net من خلال مربع نص @@أبورائد@@ 20 15,697 06-10-21, 05:05 PM
آخر رد: الماجيك مسعد
  تنفيذ سكربت القاعدة مع انطلاق البرنامج + تحديث التعديلات على القاعدة ابو ليلى 2 5,590 02-07-21, 09:05 PM
آخر رد: naserflaha71
Photo كيفية اطهار جدول داخل الأخر alsouf 3 4,782 21-11-20, 09:15 AM
آخر رد: Anas Mahmoud
  لفهم كيفية الربط الذي يتم بين الجداول viv 4 5,413 03-10-20, 05:34 PM
آخر رد: Arfat007
  [VB.NET] كيفية استخدام اداوات ديف اكسبريس devexpressلادخال السجلات الى قاعدة بيانات نوع اكسس 13adam123 0 2,902 29-03-20, 12:50 PM
آخر رد: 13adam123
Star [مقال] كيفية تحويل اسعار العملات بإستخدام Yahoo Exchange Rates Web Service Programmation 9 9,477 22-02-20, 12:58 PM
آخر رد: دمعة المقهور
Exclamation كيفية تجاوز ظهور الخطا في Global.WindowsApplication1.My.Resources الرائد 0 2,731 13-08-19, 11:40 PM
آخر رد: الرائد

التنقل السريع :


يقوم بقرائة الموضوع: