الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية ربط F1 بملف المساعدة للبرنامج

مغلق
بدأه jooorj في 27 نوفمبر 2006 · 3 رد · 641 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أود الاستفسار عن كيفية ربط مفتاح F1 بملف المساعدة الخاص بالبرنامح

بحيث لمن اضغط زر F1 من اي مكان بالبرنامج سواء كان مربع نص او نافذة على حد سواء يظهر ملف الشرح الموجود والمرفق بنفس الدليل

مثال للتوضيح

انا مستخدم HelpNamespace + HelpProvider

وعندما اضغط على زر بالبرنامج يعمل 100% ولا مشاكل ، لكن المطلوب عند الضغط على زر F1 وشكرا..

موقوف من المشاركة لقلة الأدب

============================

#2

طبعا يمكن هذا ولكن يفضل عدم استخدام اف 1 لأنه محجوز للنظام وهذا قد يسبب تعارض

اما عن الطريقة فيمكنك البحث بكلمة F2 وستجد الحل

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#3

السلام عليكم

إذا كان المتطلب أن يتم طلب ملف المساعدة بالضغط على الزر F1 من اي مكان على النموذج دون تحديد.

فالطريقة كالتالي :

أولاً نعمل بمنطق ما يعرف بـ Recursion وهذه التقنية ستمكننا من وضع حدث ما نقوم بتعريفه و نلصقه في كل العناصر المتواجده في النموذج

مع النموذج نفسه , الحدث سيكون عند تحرير الضغط من على الزر KeyUp إليك ذلك.

Private Sub KeyUpButton(ByVal sender As Object, ByVal e As KeyEventArgs)
		If e.KeyCode = Keys.F1 Then
			Help.ShowHelp(Me, hlpAdvancedCHM.HelpNamespace, _
				   HelpNavigator.Topic, "/myTopic/PageInTopic.htm")
		End If
	End Sub

هذا الحدث ينفجر عن الضغط على الزر F1 الان نريد ان نربطه بكل العناصر, بما فيها النموذج , سيكون بالتالي:

Private Sub FiredF1Button(ByVal ParentControl As Control)
		Dim Nestedctl As Control
		'Recursion Technique 
		If ParentControl.HasChildren Then
			For Each Nestedctl In ParentControl.Controls
				AddHandler Nestedctl.KeyUp, AddressOf KeyUpButton
				FiredF1Button(Nestedctl)
			Next Nestedctl
		End If
'Finally Add the Event to the parent.
		AddHandler ParentControl.KeyUp, AddressOf KeyUpButton
	End Sub

كما تلاحظ ان هذا الكود يقوم بالتحقق من الممرر الذي سنرسله لاحقاً وهو ( النموذج نفسه ) ليتحقق منه هل له أبناء Children فإن كان له أبناء

سنقوم بعملية حلقة Loop statement وهي For each على كل ابناءه ثم نضيف لهم الحدث KeyUpButton الذي عرفناه في الاعلى

وهكذا دواليك بالنسبة للأبناء إن كان لهم ابناء فيهم Nested Controls وذلك عن طريق مناداة الاجراء نفسه بهذا الكود

  FiredF1Button(Nestedctl)

ثم في أخر المطاف نقوم بربط هذا الحدث للأب وهو في مثالنا هذا النموذج نفسه

أخيراً يتم مناداة هذا الاجراء في حدث ينفجر مرة واحدة فقط مثل حدث تحميل النموذج Form Load Event إليك ذلك.

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

اقتباس
ولكن يفضل عدم استخدام اف 1 لأنه محجوز للنظام وهذا قد يسبب تعارض
هذا الكلام غير صحيح : لانه ببساطه التركيز Focus سيكون على البرنامج لا على النظام

ثانياً : كل البرامج تستخدم F1 لملفات المساعدة .

ثالثاً : أيقونة الكنترول أصلاً مكتوب عليها F1

رابعاً : ربما لو ظننا كما ظننت أخي لكان كذلك F2 محجوز لإظهار واجهة تهيئة الجهاز BOIS Setup Utility وقس على ذلك معظم الازرار.

بالتوفيق إن شاء الله.

تم تعديل هذه المشاركة بواسطة الغملاسي في 28 نوفمبر 2006 في 13:35

في المثال يتضح المقال

#4

أخي الغملاسي ما قصرت والله شكرا كثير لردودك الوافية المتوافية وفقك الله وبارك الله فيك :)

موقوف من المشاركة لقلة الأدب

============================

هذا الموضوع مغلق.

مواضيع مشابهة