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

اسئلة متعلق بضوابط الادخال

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

السلام عليكم

عندي في برنامج حقول اسمها text box ويطلب من المستخدم ادخال معلومات فيها ثم بعد ذلك ينتقل الى واجهة اخرى فيها ايضا حقول يطلب ادخال قيم اليها الان ان بدي اعرف كيف هذه الحقول تقبل قيم وتحفظها و قبل الضغط على الزر الذي يؤدي الى الانتقال الى الفورم الثاني يتم حفظ ما ادخل في الفورم الاول وبعد الضغط على كبسة حفظ الملف في الفورم الثاني يتم انشاء ملف للسلعة ؟

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

ونرجوا المساعدة للضرورة

الكلام على سي شارب في الدت نت

#2

السلام عليكم.

يمكنك استخدام الحدث KeyPress ل TextBox و هو حدث يتفعل فور ضغط الحرف على الكيبورد و لكن قبل اظهاره.

بذلك تستطيع مناقشة وضع الزر المضغوط و إذا طان لا يحقق ماتريد يمكنك منع إظهاره.

هذا مثال:

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar > (int)Keys.D0) && (e.KeyChar < (int)Keys.D9) || (e.KeyChar == (int)Keys.Back))
            {
                return;
            }

            e.Handled = true;
        }

هنا يتم التشييك إذا كان الزر المضغوط هو بين 0 أو 9 ( أي فقط أرقام ) أو تم الضغط على Backspace و في كلا الحالتين يسمح بالزر و إلا فيتم تحديد e.Handled = true أي أن الزر قد تمت معالجته و يمنع استمرار معالجة الزر المضغوط من قبل نظام التشغيل و يمنع إظهاره.

يمكنك أيضاً استخدام الحدث Leave و الذي يتفعل عند محاولة مغادرة العنصر و يمكنك التشييك على القيم المدخلة في ال TextBox و يمكنك اجبار المستخدم على البقاء في نفس العنصر حتى إدخال قسم صحيحة.

مثال:

        private void textBox1_Leave(object sender, EventArgs e)
        {
            if (textBox1.Text == "123")
            {
                MessageBox.Show("Error! Please type some other value!");
                textBox1.Focus();
            }
        }

هنا عند تحفيز الحدث Leave يتم التشييك على قيمة النص الموجود في العنصر فإذا كان مساوياً "123" ( أو أي قيمة على حسب متطلبات البرنامج ) يتم إظهار رسالة للمستخدم و إعادة التركيز Focus إلى نفس العنصر لتصحيح القيمة.

أرفقت لك مشروع فيه هذه الأمثلة.

WindowsFormsApplication4.zip

2
#3
Adel Khayata كتب:

السلام عليكم.

يمكنك استخدام الحدث KeyPress ل TextBox و هو حدث يتفعل فور ضغط الحرف على الكيبورد و لكن قبل اظهاره.

بذلك تستطيع مناقشة وضع الزر المضغوط و إذا طان لا يحقق ماتريد يمكنك منع إظهاره.

هذا مثال:

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar > (int)Keys.D0) && (e.KeyChar < (int)Keys.D9) || (e.KeyChar == (int)Keys.Back))
            {
                return;
            }

            e.Handled = true;
        }

هنا يتم التشييك إذا كان الزر المضغوط هو بين 0 أو 9 ( أي فقط أرقام ) أو تم الضغط على Backspace و في كلا الحالتين يسمح بالزر و إلا فيتم تحديد e.Handled = true أي أن الزر قد تمت معالجته و يمنع استمرار معالجة الزر المضغوط من قبل نظام التشغيل و يمنع إظهاره.

يمكنك أيضاً استخدام الحدث Leave و الذي يتفعل عند محاولة مغادرة العنصر و يمكنك التشييك على القيم المدخلة في ال TextBox و يمكنك اجبار المستخدم على البقاء في نفس العنصر حتى إدخال قسم صحيحة.

مثال:

        private void textBox1_Leave(object sender, EventArgs e)
        {
            if (textBox1.Text == "123")
            {
                MessageBox.Show("Error! Please type some other value!");
                textBox1.Focus();
            }
        }

هنا عند تحفيز الحدث Leave يتم التشييك على قيمة النص الموجود في العنصر فإذا كان مساوياً "123" ( أو أي قيمة على حسب متطلبات البرنامج ) يتم إظهار رسالة للمستخدم و إعادة التركيز Focus إلى نفس العنصر لتصحيح القيمة.

أرفقت لك مشروع فيه هذه الأمثلة.

السلام عليكم ، ومشكور اخي الكريم

لكن لي الملاحظات التالية :

الكود الاول تمام اشتغل ، ولكن اود ان تشرح لي الكود البرمجي لانني مبتدأ

والى ماذا يرمز الحرف e ؟ واذا اردنا ان نطور الكود السابق ليكون هنالك رسالة في حالة ادخال احرف تبين انه يجب ادخال ارقام كيف ذلك ؟

2- في المقابل احتاج الى كود يجعل ال textbox لا يقبل الا نص ويظهر في حالة ادخال رقم نص رسالة يطلب ادخال رقم ؟

3- في عندي ثلاثة حقول تيكست بكس ، الاول يدخل في المستخدم رقم و الثاني رقم و الثالث يقوم من مجرد وضع المؤشر عليه بأظهار حاصل جمع الحقلين السابقين ، فما الكود المطلوب ؟

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

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

وياريت يا طيب كل كود تكتب عليه شرح مفصل قليلا ، ولك في ظهر الغيب الدعوات .

#4

السلام عليكم.

1) أخي هناك باراميتر يتم تمريره إلى الحدث: KeyPress و هو e KeyPressEventArgs و هو كلاس يحتوي على معلومات عن الزر الذي تم ضغطه e.KeyChar و بالتالي الكود التالي:

(e.KeyChar >= (int)Keys.D0) && (e.KeyChar <= (int)Keys.D9)

يفحص إذا كان الزر المضغوط بين 0 و 9 (Keys.D0 و Keys.D9 )

و الكود

(e.KeyChar == (int)Keys.Back)

يفحص إذا كان الزر المضغوط: BackSpace

و إذا تحقق هذا الشيء فإنه ينفذ الكود: return أي بمعنى "لا شيء" !!

و إذا كان الزر المضغوط خارج هذه الحالات فإنه سيتم تنفيذ:

e.Handled = true;

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

طبعاً طريقة المعالجة هذه تجعل المستخدم غير قادر على إدخال أحرف غير التي حددتها له و إذا أردت إظهار رسالة للمستخدم, يمكنك وضع الكود التالي:

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar >= (int)Keys.D0) && (e.KeyChar <= (int)Keys.D9) || (e.KeyChar == (int)Keys.Back))
            {
                return;
            }

            MessageBox.Show("Only Numbers are allowed!");
            e.Handled = true;
        }

2)بالمقابل: إذا أردت السماح فقط بالأحرف:

            if ((e.KeyChar >= (int)Keys.A) && (e.KeyChar <= (int)Keys.Z) || (e.KeyChar == (int)Keys.Back))
            {
                return;
            }

            MessageBox.Show("Only Letters are allowed!");
            e.Handled = true;

3) عليك باستخدام الحدث MouseHover للعنصر TextBox و الكود أعتقد انه سهل و يمكنك استنتاجه.

4) هذا الكود للكتابة إلى ملف:

using (StreamWriter sw = new StreamWriter("CDriveDirs.txt"))
            {
                sw.WriteLine(textBox1.Text);

            }

طبعاً يتم إنشاء متحول من نوع StreamWriter و يتم تمرير اسم الملف المراد التخزين إليه, و من ثم عن طريق تعليمة sw.WriteLine يتم كتابة النص المراد تخزينه ( النص الموجود في عنصر النص )

و هذا الكود للقراءة:

string line = "";
            using (StreamReader sr = new StreamReader("CDriveDirs.txt"))
            {
                while ((line = sr.ReadLine()) != null)
                {
                    MessageBox.Show(line);
                }
            }

أخي : ملاحظة مهمة جداً.... ينبغي قراءة بعض المراجع عن لغة C# حتى تتمكن من كتابة البرامج و أنصحك أخي بعدم الاعتماد كلياً على المنتدى أو المبرمجين بل عليك محاولة البحث عن المعلومة بنفسك و غوغل أداة قوية جداً و هناك أسئلة كثيرة جداً في المنتدى تم طرحها لو أن صاحبها استخدم غوغل لوجد الإجابة بشكل أسرع من أن ينتظر أحداً لكي يساعده.

و الله من وراء القصد.

لا تنسونا من الدعاء.

1
#5
Adel Khayata كتب:

السلام عليكم.

1) أخي هناك باراميتر يتم تمريره إلى الحدث: KeyPress و هو e KeyPressEventArgs و هو كلاس يحتوي على معلومات عن الزر الذي تم ضغطه e.KeyChar و بالتالي الكود التالي:

(e.KeyChar >= (int)Keys.D0) && (e.KeyChar <= (int)Keys.D9)

يفحص إذا كان الزر المضغوط بين 0 و 9 (Keys.D0 و Keys.D9 )

و الكود

(e.KeyChar == (int)Keys.Back)

يفحص إذا كان الزر المضغوط: BackSpace

و إذا تحقق هذا الشيء فإنه ينفذ الكود: return أي بمعنى "لا شيء" !!

و إذا كان الزر المضغوط خارج هذه الحالات فإنه سيتم تنفيذ:

e.Handled = true;

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

طبعاً طريقة المعالجة هذه تجعل المستخدم غير قادر على إدخال أحرف غير التي حددتها له و إذا أردت إظهار رسالة للمستخدم, يمكنك وضع الكود التالي:

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar >= (int)Keys.D0) && (e.KeyChar <= (int)Keys.D9) || (e.KeyChar == (int)Keys.Back))
            {
                return;
            }

            MessageBox.Show("Only Numbers are allowed!");
            e.Handled = true;
        }

2)بالمقابل: إذا أردت السماح فقط بالأحرف:

            if ((e.KeyChar >= (int)Keys.A) && (e.KeyChar <= (int)Keys.Z) || (e.KeyChar == (int)Keys.Back))
            {
                return;
            }

            MessageBox.Show("Only Letters are allowed!");
            e.Handled = true;

3) عليك باستخدام الحدث MouseHover للعنصر TextBox و الكود أعتقد انه سهل و يمكنك استنتاجه.

4) هذا الكود للكتابة إلى ملف:

using (StreamWriter sw = new StreamWriter("CDriveDirs.txt"))
            {
                sw.WriteLine(textBox1.Text);

            }

طبعاً يتم إنشاء متحول من نوع StreamWriter و يتم تمرير اسم الملف المراد التخزين إليه, و من ثم عن طريق تعليمة sw.WriteLine يتم كتابة النص المراد تخزينه ( النص الموجود في عنصر النص )

و هذا الكود للقراءة:

string line = "";
            using (StreamReader sr = new StreamReader("CDriveDirs.txt"))
            {
                while ((line = sr.ReadLine()) != null)
                {
                    MessageBox.Show(line);
                }
            }

أخي : ملاحظة مهمة جداً.... ينبغي قراءة بعض المراجع عن لغة C# حتى تتمكن من كتابة البرامج و أنصحك أخي بعدم الاعتماد كلياً على المنتدى أو المبرمجين بل عليك محاولة البحث عن المعلومة بنفسك و غوغل أداة قوية جداً و هناك أسئلة كثيرة جداً في المنتدى تم طرحها لو أن صاحبها استخدم غوغل لوجد الإجابة بشكل أسرع من أن ينتظر أحداً لكي يساعده.

و الله من وراء القصد.

لا تنسونا من الدعاء.

اخي الكريم ، بوركت على مجهودك

اخي الكريم بالنسبة للسؤال التالي :

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

ايضا لقد اجبت عن السؤال الثالث مايلي :

اقتباس
3) عليك باستخدام الحدث MouseHover للعنصر TextBox و الكود أعتقد انه سهل و يمكنك استنتاجه.

اخي الكريم اريد الكود الذي سيوضع في الزر الاول و الثاني ، و الكود الذي سيوضع في الزر الثالث الذي سيجري عملية الجمع اذا ممكن ؟

وانا مبتدىْ في السي شارب وبحث في النت عن كتب تعلم السي شارب من خلال الدت نت كما تشرح انت الامثلة فلم اجد

فأرجوا ان ترشدني الى كتاب بالغة العربية لكي يساعدني على تصميم برنامجي

ولك جزيل الشكر و

ارجوا ان تبقى تساعدني في حل استفساراتي .

#6

بارك الله فيك اخي الكريم

كنت ابحث عن الفكرة :)

سؤال اخي ... Adel Khayata

ما هي فكرة ضابط البريد الالكتروني

#7

شكرا على المعلومات اخ

... Adel Khayata

لقد تعلمنا معلومات جديده

#8
اقتباس
اخي الكريم اريد الكود الذي سيوضع في الزر الاول و الثاني ، و الكود الذي سيوضع في الزر الثالث الذي سيجري عملية الجمع اذا ممكن ؟

الكود في الزر الأول و الثاني هو نفسه هذا الكود الذي ذكرته سابقاً:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar > (int)Keys.D0) && (e.KeyChar < (int)Keys.D9) || (e.KeyChar == (int)Keys.Back))
            {
                return;
            }

            e.Handled = true;
        }

و الكود الذي سيوضع في الزر الثالث:

        private void textBox3_MouseHover(object sender, EventArgs e)
        {
            textBox3.Text = (Convert.ToDecimal(textBox1.Text) + Convert.ToDecimal(textBox2.Text)).ToString();
        }

التابع Convert.ToDecimal يقوم بتحويل قيمة النص (الباراميتير ) إلى قيمة رقمية و الناتج من عنصري النص يتم جمعهما و تحويله إلى قيمة نصية مرة أخرى باستخدام ToString()

تم إرفاق نسخة من المشروع.

اقتباس
فأرجوا ان ترشدني الى كتاب بالغة العربية لكي يساعدني على تصميم برنامجي

شوف اللينك التالي: كتب سي شارب باللغة العربية

نزل الكتاب التالي: الكامل في السي شارب

و نزل الكتاب التالي ( حجمه كبير ) :

الجزء الأول

الجزء الثاني

الجزء الثالث

أخيراً: حاول الاطلاع على هذه الكتب و معرفة أساسيات لغة سي شارب قبل محاولة البدء بالبرمجة فالموضوع يحتاج إلى بعض الوقت.

اقتباس
ما هي فكرة ضابط البريد الالكتروني

أخي لم أفهم عليك هذه الجملة !!

و الأفضل وضعها في سؤال منفصل حتى لا تضيع الاجابة لهذا السؤال مع السؤال الأصلي.

WindowsFormsApplication4.zip

تم تعديل هذه المشاركة بواسطة Adel Khayata في 29 يناير 2012 في 19:38

#9

اعذرني لعدم وضوح سؤالي

كنت اقصد ضوابط الادخال الخاصة بالبريد الالكتروني

التكست بوكس يفحص القيم المدخلة هل هي بريد الكتروني ام لا

هذا كان سؤالي

#10

يرجى وضع هذا التوضيح في السؤال جديد الذي خصصته له حتى يتسنى للجميع معرفة تفاصيل الموضوع.

يتم استخدام Regular Expressions للتحكم بالقيم المدخلة.

سأحاول اليوم مساءاً وضع شرح لها و بعض الأمثلة عليها في السؤال الجديد

#11

انا في انتظارك .. وشكرا مقدما

هنالك سؤال اخر ايضا بخصوص الضوابط

بالنسبة لهذا الكود فهو يقبل الحروف الكبيرة فقط .. هل هناك طريقة للحروف الصغيرة ؟؟

اقتباس
if ((e.KeyChar >= (int)Keys.A) && (e.KeyChar <= (int)Keys.Z) || (e.KeyChar == (int)Keys.Back))

{

return;

}

MessageBox.Show("Only Letters are allowed!");

e.Handled = true;

وايضا هل هناك كود برمجي للكتابة بالتكست بوكس باللغة العربية فقط ...يعني لا يقبل رموز او حروف انجليزية

#12
اقتباس
بالنسبة لهذا الكود فهو يقبل الحروف الكبيرة فقط .. هل هناك طريقة للحروف الصغيرة ؟؟

يمكن استخدام الطريقة التالية:

        private void textBox4_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                return;

            MessageBox.Show("Only Letters are allowed!");
            e.Handled = true;

        }

التابع Char.IsLetter يفحص الباراميتر e.KeyChar و يرجع نتيجة True إذا كان الباراميتر هو حرف ( كبير/صغير ) و يرجع False في الحالات الباقية.

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

اقتباس
وايضا هل هناك كود برمجي للكتابة بالتكست بوكس باللغة العربية فقط ...يعني لا يقبل رموز او حروف انجليزية

لا أعرف طريقة معينة لتحديد الحرف العربي من الحرف الانجليزي و لكن يمكنك استخدام الفكرة التالية:

فحص الحرف المدخل إذا كان حرفاً عن طريق التابع السابق و بعدها يمكنك فحص الحرف المدخل إذا كان من خارج المجال A إلى Z ( كأحرف إنجليزية ) و بالتالي تكون قد عزلت الأحرف العربية.

1
#13
Adel Khayata كتب:

يمكن استخدام الطريقة التالية:

        private void textBox4_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                return;

            MessageBox.Show("Only Letters are allowed!");
            e.Handled = true;

        }

التابع Char.IsLetter يفحص الباراميتر e.KeyChar و يرجع نتيجة True إذا كان الباراميتر هو حرف ( كبير/صغير ) و يرجع False في الحالات الباقية.

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

لا أعرف طريقة معينة لتحديد الحرف العربي من الحرف الانجليزي و لكن يمكنك استخدام الفكرة التالية:

فحص الحرف المدخل إذا كان حرفاً عن طريق التابع السابق و بعدها يمكنك فحص الحرف المدخل إذا كان من خارج المجال A إلى Z ( كأحرف إنجليزية ) و بالتالي تكون قد عزلت الأحرف العربية.

الشكر موصول اخي الكريم .

#14

شكرا اخي الكريم على مجهودك الرائع

اتمنى لك التوفيق

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