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

أريد كتابة اجراء يقوم بتفعيل ادوات وتعطيل ادوات اخرى برمجيا ( التحكم بالخاصية Enable برمجيا )

مغلق
بدأه النبهاني في 21 يناير 2007 · 7 رد · 877 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته

اريد كتابة اجراء صغير Sub يقوم بتفعيل مجموعة معينة من الادوات وتعطيل مجموعة اخرى محددة من الادوات ( والعكس ايضا ) حسب ما اريد

اي التحكم بالخاصية Enabled لمجموعة من الادوات برمجيا ،

كتبت الاجراء التالي :

	Sub Enable(ByVal Enabled As Boolean)
		With Me
			Dim Ctrl As Control
			For Each Ctrl In Me.Controls
				Ctrl.Enabled = Enabled
			Next

			.btnSave.Enabled = Not Enabled
			.btnCancelEdit.Enabled = Not Enabled

			Dim grpCtrl As Control
			For Each grpCtrl In grpData.Controls
				grpCtrl.Enabled = Not Enabled
			Next


		End With
	End Sub

الآن اذا استدعيت الاجراء السابق في حدث التحميل مثلا بالشكل التالي :

		Enable(True)

يظهر كل شيء كما أريد الادوات التي اسندت المتغير Enabled لها تم تمكينها بالفعل ، والاخرى التي اسندت Not Enabled اليها تم الغاء تفعيلها ،

لكن اذا استدعيتها بالعكس :

		Enable(False)

النتيجة لن تكون كما اريد ، بل ستكون باختصار عدم تمكين كل الادوات !! مع انني وضعت المعامل Not قبل المتغير Enabled ولكن للأسف !

فأين الخطأ في الكود السابق ؟ وهل يمكن كتابة الكود السابق بطريقة صحيحة ؟ وماذا عن استخدام الدالة IIF في هذه الحالة ؟ كيف يكون ؟

#2

عندما تمرر له Not Enabled فإنك تمرر له عكس القيمة Enabled فإن كانت True تعيد Flase وبالعكس

كما يرجى توضيح مرادك بالضبط

تم تعديل هذه المشاركة بواسطة محمد سامر أبو سلو في 22 يناير 2007 في 00:12

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#3

نعم اخي العزيز اعلم ان Not ستعكس القيمة ،

اليك اعادة صياغة لطلبي لعلها تتضح لديك :

اريد كتابة اجراء يقوم بتغيير قيمة الخاصية Enabled لمجموعة ادوات على النافذة ، فيوجد لدي مجموعة من الاداوت ولتكن :

TextBox1 و Button1 و Button2 اريد اذا مررت القيمة True الى الاجراء الذي كتبته ، تكون قيمة الخاصية Enabled للأدوات TextBox1 و Button1 تساوي True بينما تكون للاداة Button2 تساوي False ( اي العكس )

وعندما امرر للإجراء القيمة False تكون الخاصية Enabled للأداتين TextBox1 و Button1 تساوي False بينما تكون لـ Buton2 تساوي True ...

هل وضح السؤال والمطلوب الآن ؟

#4

كنت عامل حاجة قريبة من هذي الطريقة .. أحاول أفتكر ..

كان عندي عدد من الـ TextBox وضعتهم في Panel

واستخدمت الكود التالي :

 Sub EnableTextBox()

		Dim cntrl As Control

		For Each cntrl In Panel1.Controls
			If cntrl.GetType.Name = "TextBox" Then
				CType(cntrl, TextBox).ReadOnly = False
			End If
		Next

	End Sub
#5

شكرا لك اخي Scool على المحاولة ولكن ليس هو المطلوب ، الكود الذي وضعته لا يقوم بعمل شيء ظاهر على الادوات حيث انه يغير نوع الأداة من TextBox الى TextBox مرة أخرى !! هذا ما وجدته من قراءة الكود وتجربته ..

لا ازال انتظر !

#6

الافضل ان ترفق مثال,,

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#7

اخى العزيز اعتقد ان طلبك يحققه الكود الاتى ان شاء الله

فى LockControls يتم اغلاق كافة الـ Controls من على الشاشة و فى UnLockControls يتم فتح الـ Controls مرة اخرى

	Private Sub LockControls()
		Dim FormControl As System.Windows.Forms.Control
		For Each FormControl In Me.Controls
			If FormControl.GetType.ToString = "System.Windows.Forms.ComboBox" Then
				FormControl.Enabled = False
			End If
		Next
		For Each FormControl In Me.Controls
			If FormControl.GetType.ToString = "System.Windows.Forms.TextBox" Then
				FormControl.Enabled = False
			End If
		Next
	End Sub

 Private Sub UnLockControls()
		Dim FormControl As System.Windows.Forms.Control
		For Each FormControl In Me.Controls
			If FormControl.GetType.ToString = "System.Windows.Forms.ComboBox" Then
				FormControl.Enabled = True
			End If
		Next
		For Each FormControl In Me.Controls
			If FormControl.GetType.ToString = "System.Windows.Forms.TextBox" Then
				FormControl.Enabled = True
			End If
		Next
	End Sub

واذا اردت فتح Control معين يمكنك ان تقوم باضافته فى الحدث الذى تريده ليقوم بعمله وكمثال

 Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
LockControls()
Me.TextBox1.Enabled = True
TextBox1.Focus 
End Sub

وهكذا

تم تعديل هذه المشاركة بواسطة H.Saber في 23 يناير 2007 في 09:49

#8

شكرا لك اخي العزيز على المساعدة ،

تمكنت يوم امس من كتابة اجراء Sub وهو يعمل بنجاح ( واعتقد بكفاءة !! ) والحمد لله ::

هذا هو الكود الذي استخدمته :

	Sub EnabledUnEnabled(ByVal n As Boolean)
		'تمكين المستخدم من تعديل بيانات السجل المحدد

		'الغاء تمكين الادوات في النافذة
		Dim myGroup As GroupBox
		For Each myGroup In Me.Controls
			myGroup.Enabled = n
		Next
		'تمكين مجموعات الادوات المطلوبة على النافذة
		grpDetails.Enabled = Not n
		grpSaveCancel.Enabled = Not n
	End Sub

وهو اجراء واحد وصغير لكنه يمكنك من تمكين وعدم تمكين الادوات حسب ما ترسل له في الكائن n

تحياتي :lol:

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…