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

سؤال عن ضوابط الادخال و الدات فيو جارد

بدأه ابو علي المقدسي في 27 أبريل 2012 · 9 رد · 1,085 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

كيف اجعل ال TEXTBOX لا يقبل الا احرف عربي ؟

وكيف اجعل ال TEXTBOX لا يقبل الا ارقام مع الرمز( - ) او الركز ( _ )او الرمز ( . ) ؟

وكيف ابرمج ما سبق بالنسبة لل COMBOBOX ؟

بالنسبة للدات جراد فيو عندما تعرض البيانات تعرضها في عمود اسمه بالانجليزي ، كيف احول هذا الاسم الى العربي ؟

وشكرا

#2
ابو علي المقدسي كتب:

السلام عليكم

كيف اجعل ال TEXTBOX لا يقبل الا احرف عربي ؟

وكيف اجعل ال TEXTBOX لا يقبل الا ارقام مع الرمز( - ) او الركز ( _ )او الرمز ( . ) ؟

وكيف ابرمج ما سبق بالنسبة لل COMBOBOX ؟

بالنسبة للدات جراد فيو عندما تعرض البيانات تعرضها في عمود اسمه بالانجليزي ، كيف احول هذا الاسم الى العربي ؟

وشكرا

للرفع

#3

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

هذا يطلق عليه فلترة الإدخال

وعادة أي عنصر يتقبل الكتابة فيه يكون له ثلاثة أحداث متعلقة بلوحة المفاتيح

KeyPress يتم عند النقر على أي زر من لوحة المفاتيح يمكن أن يحرر أو يؤثر على النص مثل الاحرف والأرقام والحذف الخلفي Backspace والإدخال Enter بينما لا ينفذ في حال كان الزر هو تحكم فقط مثل التحكم Control أو البداية Home أو مفاتيح الوظائف F1,F2,...F12

KeyDown يتم عند بداية النقر على أي زر من لوحة المفاتيح أيا كان

KeyUp ينفذ عندما يتم رفع الأصبع ويرجع الزر إلى وضعه الطبيعي

الحدث الأول KeyPress يعيد عبر الوسيط e خاصية KeyChar وهو من النوع رمز char ويحمل قيمة رمز المفتاح الذي تم ضغطه

وهذا الحدث هو المستخدم للفلترة بحيث نستطيع أن نفحص قيمة الخاصية وبحسب النتيجة نتصرف فلو كان رمز غير مرغوب به في هذه الحالة نظهر رسالة تنبيه وبعدها نعطي قيمة false للخاصية e.Handle وهذا بمثابة أمر بإلغاء تأثير ضغط المفتاح أي يخرج من الحدث دون أن يعدل على النص ويبقيه على ما هو عليه

أما في الحالة العادية تكون قيمة الخاصية true وبالتالي يتعدل النص طبيعيا

عملية التحقق تكون بعدة طرق إما باستخدام المناهج المعرفة مسبقا ضمن النوع char والتي تتحقق من نوع الرمز فمثلا

    	private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    	{
        	if (!char.IsNumber(e.KeyChar))
        	{
            	MessageBox.Show("لا يسمح بإدخال غير الأرقام والشحطة -","خطأ إدخال!",MessageBoxButtons.OK,MessageBoxIcon.Asterisk,MessageBoxDefaultButton.Button1,MessageBoxOptions.RtlReading | MessageBoxOptions.RightAlign);
            	e.Handled = false;
        	}
    	}

يعيد القيمة true في حال كان الرمز رقم وإلا فالنتيجة false

وهناك الكثير من المناهج التي تتححق فيما إذا كان الرمز هو سيمبول أو رقم أو حرف كبير أو حرف صغير أو حرف تحكم أو غيره

أمثلة عن تلك المناهج

http://msdn.microsof...ystem.char.aspx

الطريقة الأخرى أن تعرف مصفوفة من النوع رمز وتضع فيها الرموز المقبولة أو الرموز المرفوضة أيهما أقل

ومن ثم تستخدم المنهج الذي يتححق من انتماء الرمز المدخل إلى تلك المصفوفة ثم تتصرف على أساس النتيجة

كمثال :

    	char[] MyNumeric = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-' };
    	private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    	{
        	if (!MyNumeric.Contains(e.KeyChar))
        	{
            	MessageBox.Show("لا يسمح بإدخال غير الأرقام والشحطة -","خطأ إدخال!",MessageBoxButtons.OK,MessageBoxIcon.Asterisk,MessageBoxDefaultButton.Button1,MessageBoxOptions.RtlReading | MessageBoxOptions.RightAlign);
            	e.Handled = false;
        	}
    	}

الطريقة الثالثة هي بفحص كود الرمز والتحقق إن كان ينتمي لمجال معين

حيث نعلم أن أن الأرقام مثلا لها أكواد قياسية وهي محصورة بين 48 و حتى 57 بينما الأحرف الكبيرة من 65 إلى 90 وأما الصغيرة من 97 إلى 122

http://www.asciitable.com/

أما في حالة غير الأحرف الإنكليزية فتتبع أرقام كبيرة تختلف بحسب الخط المستخدم.

http://skyknowledge....arabic-full.htm

وكمثال عن التحقق من الأرقام:

    	private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    	{
        	if ((int)e.KeyChar < 48 | (int)e.KeyChar > 57)
        	{
            	MessageBox.Show("لا يسمح بإدخال غير الأرقام والشحطة -", "خطأ إدخال!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading | MessageBoxOptions.RightAlign);
            	e.Handled = false;
        	}
    	}

ملاحظة : تحويل قيمة الرمز إلى النوع int يعيد كود الرمز

إن عملية فلترة الإدخال بالنسبة للأحرف العربية يفضل الطريقة الثانية أي تعرف مصفوفة بكل الأحرف وتتحقق من كون الرمز المدخل ينتمي للمجموعة أو لا.

بهذا تضمن عدم إدخال لغات أخرى وبغض النظر عن الخط وترميزه الداخلي

أحب أن أنوه أن الحدثين KeyDown و KeyUp يستخدمان للتعرف على الزر المضغوط ولا سيما إذا كان يرافقه ضغط مفتاح تحكم مثل Alt أو Shift أو Control أو غيره حيث الوسيط e ضمن هذين الحديثين يعيد خصائص أكثر وقيم أكثر تبين زر أي مفتاح تم ضغطه مثلا هل ال Shift الأيمن أم الأيسر

كما يستفاد من هذين الحدثين في حال أردت تنفيذ أمر ما ضمن أحداث الفأرة عندما يكون أحد المفاتيح مضغوطا

فمثلا لو أردت أن يتم الاستجابة لحدث تحريك الماوس بصورة معينة في حال كان مفتاح المسطرة SpaceBar مضغوطا للأسفل

حينها تعرف متحول عام بولياني وتعطيه قيمة true عند حدث نزول المفتاح وكان المفتاح هو المسطرة وذلك في الحدث التابع للفورم أو العنصر

وفي حدث رفع المفتاح تعيد القيمة false للمتحول

ثم تستخدم هذا المتحول داخل أي حدث آخر مثل تحرك مؤشر الفأرة بحيث لو كان القيمة true ينفذ شيء وإلا ينفذ شيء آخر

والملاحظة الآخيرة

هي أن مفتاح KeyUp هو الذي يستخدم لتنفيذ أمر ما عند النقر على مفتاح ما

وهذا لأنه أفضل من استخدام التنفيذ داخل حدث KeyDown لأنه في هذه الحالة تسمح للمستخدم بالتراجع عن التنفيذ وذلك بنقل التركيز إلى عنصر آخر ثم الإفلات مما ينقل قد حدث رفع المفتاح إلى العنصر الجديد وتجاهل السابق

وهذا الأمر ينطبق على أحداث نزول ورفع أزرار الماوس

ولعل الكثير تعرض لمثل هذا الامر فسحب المؤشر بعيد ثم حرر الزر ليتجاهل أمر النقر.

بالنسبة للفلترة تنطبق على أي عنصر يحتوي أحداث لوحة المفاتيح

والحمد لله رب العالمين

تم تعديل هذه المشاركة بواسطة المبرمج أبو أحمد في 29 أبريل 2012 في 13:12

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#4
المبرمج أبو أحمد كتب:

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

هذا يطلق عليه فلترة الإدخال

وعادة أي عنصر يتقبل الكتابة فيه يكون له ثلاثة أحداث متعلقة بلوحة المفاتيح

KeyPress يتم عند النقر على أي زر من لوحة المفاتيح يمكن أن يحرر أو يؤثر على النص مثل الاحرف والأرقام والحذف الخلفي Backspace والإدخال Enter بينما لا ينفذ في حال كان الزر هو تحكم فقط مثل التحكم Control أو البداية Home أو مفاتيح الوظائف F1,F2,...F12

KeyDown يتم عند بداية النقر على أي زر من لوحة المفاتيح أيا كان

KeyUp ينفذ عندما يتم رفع الأصبع ويرجع الزر إلى وضعه الطبيعي

الحدث الأول KeyPress يعيد عبر الوسيط e خاصية KeyChar وهو من النوع رمز char ويحمل قيمة رمز المفتاح الذي تم ضغطه

وهذا الحدث هو المستخدم للفلترة بحيث نستطيع أن نفحص قيمة الخاصية وبحسب النتيجة نتصرف فلو كان رمز غير مرغوب به في هذه الحالة نظهر رسالة تنبيه وبعدها نعطي قيمة false للخاصية e.Handle وهذا بمثابة أمر بإلغاء تأثير ضغط المفتاح أي يخرج من الحدث دون أن يعدل على النص ويبقيه على ما هو عليه

أما في الحالة العادية تكون قيمة الخاصية true وبالتالي يتعدل النص طبيعيا

عملية التحقق تكون بعدة طرق إما باستخدام المناهج المعرفة مسبقا ضمن النوع char والتي تتحقق من نوع الرمز فمثلا

    	private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    	{
        	if (!char.IsNumber(e.KeyChar))
        	{
            	MessageBox.Show("لا يسمح بإدخال غير الأرقام والشحطة -","خطأ إدخال!",MessageBoxButtons.OK,MessageBoxIcon.Asterisk,MessageBoxDefaultButton.Button1,MessageBoxOptions.RtlReading | MessageBoxOptions.RightAlign);
            	e.Handled = false;
        	}
    	}

يعيد القيمة true في حال كان الرمز رقم وإلا فالنتيجة false

وهناك الكثير من المناهج التي تتححق فيما إذا كان الرمز هو سيمبول أو رقم أو حرف كبير أو حرف صغير أو حرف تحكم أو غيره

أمثلة عن تلك المناهج

http://msdn.microsof...ystem.char.aspx

الطريقة الأخرى أن تعرف مصفوفة من النوع رمز وتضع فيها الرموز المقبولة أو الرموز المرفوضة أيهما أقل

ومن ثم تستخدم المنهج الذي يتححق من انتماء الرمز المدخل إلى تلك المصفوفة ثم تتصرف على أساس النتيجة

كمثال :

    	char[] MyNumeric = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-' };
    	private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    	{
        	if (!MyNumeric.Contains(e.KeyChar))
        	{
            	MessageBox.Show("لا يسمح بإدخال غير الأرقام والشحطة -","خطأ إدخال!",MessageBoxButtons.OK,MessageBoxIcon.Asterisk,MessageBoxDefaultButton.Button1,MessageBoxOptions.RtlReading | MessageBoxOptions.RightAlign);
            	e.Handled = false;
        	}
    	}

الطريقة الثالثة هي بفحص كود الرمز والتحقق إن كان ينتمي لمجال معين

حيث نعلم أن أن الأرقام مثلا لها أكواد قياسية وهي محصورة بين 48 و حتى 57 بينما الأحرف الكبيرة من 65 إلى 90 وأما الصغيرة من 97 إلى 122

http://www.asciitable.com/

أما في حالة غير الأحرف الإنكليزية فتتبع أرقام كبيرة تختلف بحسب الخط المستخدم.

http://skyknowledge....arabic-full.htm

وكمثال عن التحقق من الأرقام:

    	private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    	{
        	if ((int)e.KeyChar < 48 | (int)e.KeyChar > 57)
        	{
            	MessageBox.Show("لا يسمح بإدخال غير الأرقام والشحطة -", "خطأ إدخال!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading | MessageBoxOptions.RightAlign);
            	e.Handled = false;
        	}
    	}

ملاحظة : تحويل قيمة الرمز إلى النوع int يعيد كود الرمز

إن عملية فلترة الإدخال بالنسبة للأحرف العربية يفضل الطريقة الثانية أي تعرف مصفوفة بكل الأحرف وتتحقق من كون الرمز المدخل ينتمي للمجموعة أو لا.

بهذا تضمن عدم إدخال لغات أخرى وبغض النظر عن الخط وترميزه الداخلي

أحب أن أنوه أن الحدثين KeyDown و KeyUp يستخدمان للتعرف على الزر المضغوط ولا سيما إذا كان يرافقه ضغط مفتاح تحكم مثل Alt أو Shift أو Control أو غيره حيث الوسيط e ضمن هذين الحديثين يعيد خصائص أكثر وقيم أكثر تبين زر أي مفتاح تم ضغطه مثلا هل ال Shift الأيمن أم الأيسر

كما يستفاد من هذين الحدثين في حال أردت تنفيذ أمر ما ضمن أحداث الفأرة عندما يكون أحد المفاتيح مضغوطا

فمثلا لو أردت أن يتم الاستجابة لحدث تحريك الماوس بصورة معينة في حال كان مفتاح المسطرة SpaceBar مضغوطا للأسفل

حينها تعرف متحول عام بولياني وتعطيه قيمة true عند حدث نزول المفتاح وكان المفتاح هو المسطرة وذلك في الحدث التابع للفورم أو العنصر

وفي حدث رفع المفتاح تعيد القيمة false للمتحول

ثم تستخدم هذا المتحول داخل أي حدث آخر مثل تحرك مؤشر الفأرة بحيث لو كان القيمة true ينفذ شيء وإلا ينفذ شيء آخر

والملاحظة الآخيرة

هي أن مفتاح KeyUp هو الذي يستخدم لتنفيذ أمر ما عند النقر على مفتاح ما

وهذا لأنه أفضل من استخدام التنفيذ داخل حدث KeyDown لأنه في هذه الحالة تسمح للمستخدم بالتراجع عن التنفيذ وذلك بنقل التركيز إلى عنصر آخر ثم الإفلات مما ينقل قد حدث رفع المفتاح إلى العنصر الجديد وتجاهل السابق

وهذا الأمر ينطبق على أحداث نزول ورفع أزرار الماوس

ولعل الكثير تعرض لمثل هذا الامر فسحب المؤشر بعيد ثم حرر الزر ليتجاهل أمر النقر.

بالنسبة للفلترة تنطبق على أي عنصر يحتوي أحداث لوحة المفاتيح

والحمد لله رب العالمين

بارك الله بك ، لكن في مشكلة صغيرة وهي انه عند الضغط على حرف ممنوع تخرج الرسالة ولكن الحرف يكتب ما السبب ؟

ولدي كود يمكن ان نجري عليه تغيرات ... اضعه هنا لاحقا ... .

وتقبل تحياتي .

#5
ابو علي المقدسي كتب:

بارك الله بك ، لكن في مشكلة صغيرة وهي انه عند الضغط على حرف ممنوع تخرج الرسالة ولكن الحرف يكتب ما السبب ؟

ولدي كود يمكن ان نجري عليه تغيرات ... اضعه هنا لاحقا ... .

وتقبل تحياتي .

عفوا أخي فقط غير قيمة e.Handled إلى true

e.Handled = true;

لأني ذكرتها بالعكس

أي عندما تأخذ هذه الخاصية قيمة true يتم تجاهل الحرف

وعذرا على هذا الالتباس

تم تعديل هذه المشاركة بواسطة المبرمج أبو أحمد في 30 أبريل 2012 في 14:12

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#6
المبرمج أبو أحمد كتب:

عفوا أخي فقط غير قيمة e.Handled إلى true

e.Handled = true;

لأني ذكرتها بالعكس

أي عندما تأخذ هذه الخاصية قيمة true يتم تجاهل الحرف

وعذرا على هذا الالتباس

بارك الله بك ، لكن كيف ممكن نجعل التكست بكس ان يقبل تنفيذ معالجة حدث النقر على باكس سبيس يعني لو المستخدم دخل حرف خطأ لن يقبل الكود السابقة حذف لانه عندما تضغط باق سبيس يرفض ويعطي الرسالة ؟

فكيف يمكن معالجة ذلك ؟

#7

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

حياكم الله أخي

في هذه الحالة يجب أن تجعلها من الرموز المسموح بها

ويمكن ذلك باستخدام منهج الفحص

char.IsControl(e.KeyChar)

وللعلم المناهج الموجودة تشمل كل أقسام الرموز فهناك منهج يفحص علامات الترقيم ومنهج للأرقام فقط ومنهج للرموز العددية وهكذا

وأود الملاحظة أنه يجب الحماية من اللصق المباشر فربما المستخدم نسخ نص مخالف وقام بلصقه فيجب عليك عمل فحص لكامل النص لأنه سينزل دفعة واحدة وهذا يتم في حدث تغير النص التابع للتيكست بوكس أو أن تعطل خاصية اللصق.

1

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#8

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

الأخ أبو علي :

أثناء تصفحي وجدت موضوع قديم نوعا ما للأخ محمد رضى جزاه الله خيرا

إضافات ل #c

وضع فيه أدوات كان قد برمجها بنفسه ووضعها لينتفع بها الإخوة زوار المنتدى

فقلت أدلك عليها لعلك تفيد خاصة المشاركة رقم #10 فيها فلتر أنت تحدد رموزه

1

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#9

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

ادا تمكن تفيدني بنفس الكود ولكن على c# 2010 يعني .net frame work 4.0

والله يجزيك عنا كل خير يا غالي

#10

ما في حدا :blink: :blink: :blink: :blink: :blink:

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

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

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

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

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