Member 13068046 Ответов: 2

Как сделать так, чтобы текстовое поле принимало только цифры?


Привет,

В настоящее время я пишу код для калькулятора, предназначенного для вычисления любого значения физического уравнения с учетом любого другого значения. Хотя эта часть, похоже, работает, и мне удалось включить TryParse в преобразование так, чтобы оно установило любое нечисловое значение равным нулю, мне трудно понять, как предотвратить ввод символов или букв.

Что мне действительно нужно, так это либо код, который отправит сообщение, если символ или буква будут вставлены в текстовое поле, либо текстовое поле, которое откажется принимать ввод, отличный от числового значения.

Кто-нибудь может мне помочь? Любой совет был бы очень признателен.

Ниже приведен пример моего текущего кода.

Спасибо.

Что я уже пробовал:

public partial class Form1 : Form
{
    double P1, P2, V1, V2, U1, U2, v1, v2, h1, h2, Q, W, Z, g;

   //*******************************************************************
    public Form1()
    {
        InitializeComponent();

        Z = 0;
        P1 = P2 = V1 = V2 = U1 = U2 = v1 = v2 = h1 = h2 = Q = W = Z;
        g = 9.81;
    }

   //*******************************************************************
    private void txtBox_P2In_TextChanged(object sender, EventArgs e)
    {
        double.TryParse(txtBox_P2In.Text, out P2);
    }

   //*******************************************************************
    private void txtBox_P1In_TextChanged(object sender, EventArgs e)
    {
        double.TryParse(txtBox_P1In.Text, out P1);
    }

   //*******************************************************************
    private void CalcButton1_Click(object sender, EventArgs e)
    {
        if (radioButtonP1.Checked == true)
        {
            P1 = (((P2 * V2) + U2 + ((v2 * v2) / 2) + (g * h2) + W - Q - (g * h1) - ((v1 * v1) / 2) - U1) / V1);
            txtBox_P1Out.Text = P1.ToString();
        }
        else if (radioButtonP1.Checked == false)
        {
            txtBox_P1Out.Text = null;
        }
    }
}

CHill60

Вы обратили внимание на список связанных вопросов справа от вашего вопроса?

[no name]

Держу пари, что есть тысячи результатов поиска google по этому же вопросу....

Member 13068046

Есть, но я новичок в этом деле, и большинство кодовых решений, которые они показывают, сбивают меня с толку. Этот сайт, как правило, хорош для прямых ответов, поэтому я и задал этот вопрос. Плюс ответ, с которым я постоянно сталкиваюсь:

private void txt_P1In_KeyPress(отправитель объекта, KeyPressEventArgs e)
{
е.Обрабатываются = !(Пеструшка.IsDigit(электронная.Ключевой-символ) || электронная.Ключевой-символ == '\б' || е.Ключевой-символ = '.');
}

это не работает в моем коде, и я понятия не имею, почему более простое или объясненное решение было бы предпочтительнее.

Karthik_Mahalingam

убедитесь, что событие сопоставлено с элементом управления

[no name]

Есть много прямых и четко объясненных примеров, которые отвечают на ваш вопрос. И самое бесполезное объяснение проблемы - "не работает". Если вы позвоните своему механику по телефону и скажете: "машина не работает", ожидаете ли вы, что кто-то точно узнает, в чем проблема? Мы не знаем, что, по вашему мнению, означает "не работает" больше, чем ваш механик.

Member 13068046

Извините, но если бы я мог понять, почему код не работает, я бы не просил о помощи, не так ли?

С механиком вы получаете какую-то обратную связь от автомобиля, которую вы можете описать им, что поможет им сузить проблему (например, он издает дребезжащий шум под капотом, он продолжает тормозить, дым выбрасывается из задней части).

Я не могу этого сделать, потому что я даже не могу описать проблему, кроме того, что текстовое поле все еще принимает буквы и символы, и ни одно окно сообщения не появляется в любое время (по сути, это означает, что оно не работает, так как оно не сделало ничего, что я хотел бы сделать).

Под "ясно объясненным" вы подразумеваете ясно объясненное для вас или ясно объясненное для меня, поскольку я действительно считаю, что эта конкретная фразировка несет в себе некоторую субъективность. Но, пожалуйста, если вы знаете сайт, который действительно хорошо и просто объясняет, как закодировать эту конкретную проблему, не стесняйтесь присылать мне ссылку. Таким образом, я могу перестать испытывать трудности с поиском ответа, а вы можете перестать испытывать трудности с размещением антагонистических комментариев на моей странице вопросов.

Надеюсь, это все прояснит.

Спасибо.

2 Ответов

Рейтинг:
12

Mehedi Shams

Привет Member 13068046,

Если вам все еще нужна помощь:

1) Снимите TextChanged обработчик событий.
2) Добавить KeyPress обработчик событий.
3) Код:

private void txtBox_P1In_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsDigit(e.KeyChar))
    {
        MessageBox.Show("Only numbers please!");
        e.Handled = true;
    }
}
'e.Handled = True' инструктирует компилятор, что вы явно позаботились о вводе данных, и тем самым освобождает компилятор от его обязанностей с дальнейшими действиями (отображение символа).


Member 13068046

Извините, но это не работает. Я попробовал это сделать, и что бы я ни делал, ни одно окно сообщения не появлялось и не останавливало меня.

Но большое вам спасибо за то, что вы попытались помочь. Это очень ценится.

Mehedi Shams

Привет Член 13068046,

Я проверил его, и он работал нормально. Что действительно может произойти с вашей стороны, так это то, что событие не стреляет. Я знаю, это может показаться странным, но правильно ли вы создали обработчики? (Просто скопировать и вставить приведенный выше код не получится).

Member 13068046

Привет, я понял, что если я поставлю e. Handled = true перед MessageBox.Покажите, что он работает блестяще. Не знаю почему,но это так.

Огромное спасибо.

Mehedi Shams

Привет Член 13068046,

Рад, что вы нашли обходной путь. В любом случае все должно быть хорошо, но я действительно не знаю, почему один сработал, а другой потерпел неудачу. Пожалуйста, сделайте чистую перестройку и посмотрите, работает ли она в любом случае.

Рейтинг:
1

RaviRanjanKr

Вы можете использовать приведенный ниже код.

private void txtBox_P1In_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) &&
        (e.KeyChar != '.'))
    {
            e.Handled = true;
    }
}

и хотя вы работаете над приложением типа расчета, вы можете разрешить его использовать. keypress случае txtBox_P1In

if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
     {
       e.Handled = true;
     }