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

كيف أتعامل مع أى كنترول فى أى مستوى على الفورم

بدأه _- محمد نور -_ في 26 سبتمبر 2008 · 9 رد · 1,036 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أريد أن أكتب دالة تأخذ كائن من نافذة "فورم" و تقوم بالبحث عن أى تيكست بوكس و ترى لو أن هناك أى كتابة فى أى واحد فى أى عمق تخبرنى بذلك

مثال على ذلك

post-63827-1222432244_thumb.jpg

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

#2

لابد من استخدام recursion method بمعني ان تستدعي الدالة نفسها

و بالنسبة لما تريد انت تقصد ان تمرر container control لدالة و الرجوع بكل النصوص المكتوبة داخله

الكود التالي يوضح ما تريد

		public void GetTextBoxesValues(Control container,ref List<string> values)
		{
			foreach (Control child in container.Controls)
			{
				if (child is TextBox)
				{
					if (!string.IsNullOrEmpty(child.Text.Trim())) values.Add(child.Text);
				}
				else
				{
					GetTextBoxesValues(child, ref values);
				}
			}
		}

استدعي دالة GetTextBoxesValues و مرر لها اسم الكنترول و list of strings لتخزين القيم ( لاحظ استدعاء الدالة لنفسها)

الكود التالي يوضح الاستخدام

			List<string> values = new List<string>();
			GetTextBoxesValues(this, ref values);

			foreach (string str in values)
			{
				MessageBox.Show(str);
			}

بالتوفيق

#3

يبدو أنه لا يوجد أى طريقة أخرى للأسف

لم أكن أريد أن أستخدم هذه الطريقة

عموما شكرا لك

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

#4
اقتباس
يبدو أنه لا يوجد أى طريقة أخرى للأسف

لم أكن أريد أن أستخدم هذه الطريقة

ايه المشكله في الطريقة دي ؟!

#5

الstack

ممكن يحدث overflow

و لكن عموما المفروض أن عدد الكنترولات مهما بلغ عددها لن تصل الى درجة الoverflow

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

#6
اقتباس
الstack

ممكن يحدث overflow

و لكن عموما المفروض أن عدد الكنترولات مهما بلغ عددها لن تصل الى درجة الoverflow

مظبوط كلامك بس ال C# مفيش فيها limit لل recursion يعني معاك لحد نهاية الذاكرة :lol:

بس فيه لغات تانية بتحدد ال depth زي ال prolog و python و transact sql

#7

الحد المسموح به في ال#C قبل حدوث الStack Overflow هو 127 أي بمعنى أن الfunction يمكنها أن تنادي نفسها بحد اقصى 127 مرة

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#8

هذا الكود يعمل فقط فى تطبيقات ال SDI و ليس ال MDI

تم تعديل هذه المشاركة بواسطة Night Coder في 3 أكتوبر 2008 في 08:27

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#9
اقتباس
الحد المسموح به في ال#C قبل حدوث الStack Overflow هو 127 أي بمعنى أن الfunction يمكنها أن تنادي نفسها بحد اقصى 127 مرة

فعلا يوجد limit (اعتذر عن الخطأ في المشاركة السابقة)و لكن ليس 127 (حسب تجربتي)

لقد قمت بتجربة الكود التالي و لم يحدث Exception و قيمة المتغير depth كما توقعت =10001

		//to count depth limit
		int depth = 0;
		public void TestRecursionDepthLimit()
		{
			//add 1 for every recursive calling
			depth++;

			//check if 10000 is acceptable depth limit
			if (depth > 10000)
			{
				return;
			}

			// recursion
			TestRecursionDepthLimit();
		}
#10
اقتباس
هذا الكود يعمل فقط فى تطبيقات ال SDI و ليس ال MDI

قمت بتجربة الكود مع MDI لا توجد مشكلة !!!

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

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

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

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

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