سؤال

هل يعرف أحد لماذا لا تقوم Microsoft بشحن مربع نص رقمي باستخدام إطار عمل .NET الخاص بها، على سبيل المثال؟مربع نص يضمن أن الأحرف المدخلة هي دائمًا رقم صالح؟إنه شيء شائع الاستخدام عبر التطبيقات ذات النكهات المختلفة وهو في الواقع شيء تقدمه معظم مكتبات واجهة المستخدم الرسومية (حسنًا، تلك التي أعرفها) بطريقة ما.بينما الأمر ليس كذلك الذي - التي من الصعب أن تكتب بنفسك، فهي ليست تافهة أيضًا.

لذا، أنا مهتم بمعرفة ما إذا كان بإمكان أي شخص تبرير هذا الإغفال.

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

هناك الكثير من التطبيقات بدرجات متفاوتة من الجودة على الشبكة، بل يوجد بالفعل مثال على ذلك على MSDN.

تحرير 2:شكرًا يا رفاق، يبدو أن الرقم لأعلى ولأسفل هو عنصر تحكم .NET لاستخدامه للإدخال الرقمي فقط (وسبب عدم وجود عنصر تحكم مربع نص رقمي واضح).كان من الممكن أن يكون أمرًا رائعًا لو أنه تم منع إدخال الأحرف غير الرقمية تلقائيًا (عند الضغط على المفاتيح، عند اللصق، وما إلى ذلك) ولكن أعتقد أنه جيد بما يكفي لإجراء التحقق من الصحة عندما يفقد عنصر التحكم التركيز.ويمكن للمرء أن يقوم بالضغط على المفتاح، أو بالتحقق من صحة اللصق إذا كان الشخص حريصًا حقًا...

هل كانت مفيدة؟

المحلول

أنا أؤيد توصية Garry Shutlers الثانية باستخدام NumericUpDown.قد لا تحب الضوابط من أعلى إلى أسفل، ولكن ذلك يكون المظهر القياسي لعنصر تحكم الإدخال الرقمي في Windows، ويجب عليك التفكير مرتين قبل استخدام مظهر مختلف.

إذا انتهى بك الأمر إلى برمجة تطبيقك الخاص (أو العثور على تطبيق على الويب)، فهناك بعض المخاطر التي يجب البحث عنها.تذكر أن هناك طرقًا عديدة لدخول القيمة إلى عنصر التحكم إلى جانب الضغط على المفاتيح.إن الرابط الموجود في الرابط الخاص بك على MSDN لا يتجاوز حتى اللصق، لذا يمكنك بسهولة الضغط على ctrl-V على سلسلة غير رقمية في عنصر التحكم.

نصائح أخرى

يمكنك استخدام أ MaskedTextBox

هنالك ال NumericUpDown التحكم المصمم خصيصًا لإدخال الأرقام ويمكن استخدامه مثل TextBox.

بدءًا من WinForms 2.0، لديك MaskedTextBox.يمكنك ضبط القناع على ما تريد، أي.للأرقام استخدم القناع كل الأصفار.

من الغريب أن بعض عناصر تحكم .NET Framework لا تكشف عن كافة ميزات عنصر تحكم Windows الأساسي الذي تلتف حوله.في هذه الحالة، لسبب ما ES_NUMBER لم يتم تنفيذ النمط.

ربما يمكنك التعامل مع الحدث HandleCreated (أو تجاوز OnHandleCreated، نظرًا لأن TextBox غير مغلق) والاتصال SetWindowLong لتعيين ES_NUMBER النمط على عنصر تحكم التحرير الأساسي. ES_NUMBER تم تعريفه على أنه 0x2000 في WinUser.h.

يمكنك أيضًا اشتقاق فئة TextBox والحصول على حدث لوحة المفاتيح والتأكد من عدم كتابة أي شيء سوى الأرقام.

إذا كانت صفحة ويب، فسيتم فعل الشيء نفسه مع مربع نص HTML باستخدام Javascript.

تترك Microsoft الأمر لأطراف ثالثة لملء الفجوات المتعلقة بعناصر التحكم المفقودة في مربع الأدوات.أتصور أن الوقت والتكلفة سيظهران في مبرراتهم المنطقية.

ولكن في هذه الحالة، أعتقد أن FilterTextBox يوفر الوظيفة التي تصفها.

بناء على التعديل الثاني:

ال الأسئلة الشائعة حول نماذج Windows يخبرك بكيفية تقييد الأحرف في مربع النص المعني 26.12:

26.12 كيف يمكنني تقييد الأحرف التي يمكن لصندوق النص الخاص بي قبولها؟

يمكنك التعامل مع حدث KeyPress الخاص بمربع النص، وإذا كان الحرف الذي تم تمريره غير مقبول، فقم بوضع علامة على وسيطة الأحداث لإظهار أنه تم التعامل مع الحرف.يوجد أدناه مربع نص مشتق يقبل الأرقام فقط (وأحرف التحكم مثل مسافة للخلف، ...).على الرغم من أن المقتطف يستخدم مربع نص مشتق، إلا أنه ليس ضروريًا حيث يمكنك فقط إضافة المعالج إلى النموذج الأصلي الخاص به.

راجع الأسئلة الشائعة للحصول على مثال التعليمات البرمجية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top