سؤال

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

أتذكر القيام بذلك إلى حد ما في الآونة الأخيرة من خلال وضع بعض الأحداث وغيرها, ولكن لا أستطيع أن أتذكر كيف.

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

المحلول

والحدث TextChanged

وفي المستقبل يمكنك أن تجد جميع الأحداث على مكتبة MSDN، وهنا في مربع نص فئة مرجع :

HTTP: // msdn.microsoft.com/en-us/library/system.windows.forms.textbox(VS.80).aspx

نصائح أخرى

إذا كنت تستخدم ربط البيانات، انتقل إلى خصائص مربع النص. المفتوحة (DataBindings) في الجزء العلوي، انقر على الممتلكات (متقدم)، ستظهر ثلاث نقاط (...) انقر على تلك. تظهر شاشة البيانات المتقدمة ملزمة. لكل خاصية مربع نص منضم، في حالة Text الخاص بك، يمكنك تعيين عندما ربط البيانات، وبالتالي التحقق من الصحة، يجب أن "ركلة في" باستخدام Data Source Update mode منسدل. إذا قمت بتعيين أنه إلى OnPropertyChanged، فإنه سيتم إعادة تقييم أثناء الكتابة (الافتراضي هو OnValidation التي التحديثات فقط كما التبويب أنت).

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

عند ربط الخاص بك مربع نص إلى bindingSource اذهب الى Advanced ثم اختر نوع التحقق من صحة
"على الملكية تغيرت".هذا وسيتم نشر البيانات الخاصة بك إلى الكيان على كل ضغطة مفتاح.هنا هو لقطة من الشاشة

ويجب أن يكون التحقق عند الضغط على المفاتيح أو KeyDown الأحداث وليس مجرد حدث TextChanged الخاص بك.

وهنا هو مثال C # مباشرة من في MSDN وثائق :

// Boolean flag used to determine when a character other than a number is entered.
private bool nonNumberEntered = false;

// Handle the KeyDown event to determine the type of character entered into the control.
private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    // Initialize the flag to false.
    nonNumberEntered = false;

    // Determine whether the keystroke is a number from the top of the keyboard.
    if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
    {
        // Determine whether the keystroke is a number from the keypad.
        if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
        {
            // Determine whether the keystroke is a backspace.
            if(e.KeyCode != Keys.Back)
            {
                // A non-numerical keystroke was pressed.
                // Set the flag to true and evaluate in KeyPress event.
                nonNumberEntered = true;
            }
        }
    }
    //If shift key was pressed, it's not a number.
    if (Control.ModifierKeys == Keys.Shift) {
        nonNumberEntered = true;
    }
}

// This event occurs after the KeyDown event and can be used to prevent
// characters from entering the control.
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
    // Check for the flag being set in the KeyDown event.
    if (nonNumberEntered == true)
    {
        // Stop the character from being entered into the control since it is non-numerical.
        e.Handled = true;
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top