Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2010, 16:47   #1
StudentPolitech
Форумчанин
 
Аватар для StudentPolitech
 
Регистрация: 21.11.2008
Сообщений: 400
По умолчанию С#, проблемы с textBox

Посоветуйте как можно сделать, чтобы в textBox1 можно было вводить только целочисленные неотрицательные значения, а в textBox2 любые неотрицательные значения и главное: если в ничего не вводишь и нажимаешь кнопку выполнить то в label отображалось бы сообщение что "Неправильно введено число" (в label необязательно, можно вывести MessageBox)
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Variant1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
      
        }

        private double formula(int n, double a)
        {
            double koren = 0;
            int kol=n;
            for (int i = 1; i <= n; i++)
            {
                
                koren += kol * a;
                koren = Math.Sqrt(koren);
                kol--;
            }
            return koren;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int b = 0;
             double otvet = 0, c=0;
             b = Convert.ToInt32(textBox1.Text);
             c = Convert.ToDouble(textBox2.Text);
             otvet=formula(b,c);
             label4.Text = Convert.ToString(otvet);
        }

        private void чтоДелатьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Итак, Вы пользователь всё-таки решились запустить данную программу :) \nИтак что с ней делать: \n 1) Введите целочисленное значение в поле n и любое неотрицательное значение в поле а. Внизу указана формула в которую будут подставлены введенные значения \n2)Нажмите <<Вычислить>>. \n3) Будет произведен расчет, и ответ будет выведен ниже надписи <<Ответ>>   ");
        }

        private void обАвтореToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Александров Александр Александрович \nСтудент группы ВМ-082");
        }

        private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Программа для вычисления заданной формулы по дисциплине \"Программирование на ЯВУ С#\"\n ВАРИАНТ №1 ");
        }
        private void выходToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        
    }
}
Винда, KIS 2010, книжка по С/С++, остальное неважно........
StudentPolitech вне форума Ответить с цитированием
Старый 15.09.2010, 16:52   #2
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Можно if можно Regex
If(Convert.ToInt32(textBox1.Text)>0 ) и т.д
Cpluser вне форума Ответить с цитированием
Старый 15.09.2010, 17:06   #3
StudentPolitech
Форумчанин
 
Аватар для StudentPolitech
 
Регистрация: 21.11.2008
Сообщений: 400
Радость

Цитата:
Сообщение от Cpluser Посмотреть сообщение
Можно if можно Regex
If(Convert.ToInt32(textBox1.Text)>0 ) и т.д
пробовал, не помогает. Мне бы самое главное сделать так, чтобы когда ничего не вводишь, не вылетала ошибка, а просто в labek писалось, что типа неверно введенное число
PS с regex не знаком
Винда, KIS 2010, книжка по С/С++, остальное неважно........
StudentPolitech вне форума Ответить с цитированием
Старый 15.09.2010, 18:01   #4
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

Код:
        string oldText = "";        
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if (textBox1.Text != "")
            {
                int value;
                if (int.TryParse(textBox1.Text, out value))
                {
                    oldText = textBox1.Text;
                }
                else
                {
                    textBox1.Text = oldText;                    
                }
            }
        }
прицепи это соответственно к TextChanged

и будут вводиться только цифры и только положительные(минус это ведь не цифра)
m0nax вне форума Ответить с цитированием
Старый 15.09.2010, 18:31   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

В C# принято это делать посредством валидации.
Грубо говоря так:
Код:
        private void textBox3_Validating(object sender, CancelEventArgs e)
        {
            TextBox tb = (sender as TextBox);

            try
            {
                int value = Convert.ToInt32(tb.Text);

                if (value < 0)
                {
                    e.Cancel = true;
                    MessageBox.Show("Ошибка. Значение должно быть положительным");
                }
            }
            catch
            {
                MessageBox.Show("Неверное значение");
            }
        }
pu4koff вне форума Ответить с цитированием
Старый 15.09.2010, 19:00   #6
StudentPolitech
Форумчанин
 
Аватар для StudentPolitech
 
Регистрация: 21.11.2008
Сообщений: 400
По умолчанию

pu4koff если несложно, объясни что это всё значит и как мне всё это прикрепить к программе???????
Винда, KIS 2010, книжка по С/С++, остальное неважно........
StudentPolitech вне форума Ответить с цитированием
Старый 15.09.2010, 19:55   #7
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от StudentPolitech Посмотреть сообщение
pu4koff если несложно, объясни что это всё значит и как мне всё это прикрепить к программе???????
У TextBox'a есть события OnValidating и OnValidated или как-то так. Первое вызывается для проверки корректности введённого значения (срабатывает при потере контролом фокуса. Если значение неправильное, то выставляем Cancel = true и контрол фокус не потеряет, т.е. нельзя будет что-то другое ввести, пока это правильно не введём). Второе вызывается после успешного изменения значения.
В идеале конечно прикрутить в качестве источника данных целочисленную переменную и всё в этом духе... (см. инфу по binding'у). Это как-то более шарпное.
Вариант m0nax'а тоже в принципе работоспособен и имеет право на жизнь, но это как-то по делфийски чтоли...
pu4koff вне форума Ответить с цитированием
Старый 17.09.2010, 11:20   #8
StudentPolitech
Форумчанин
 
Аватар для StudentPolitech
 
Регистрация: 21.11.2008
Сообщений: 400
По умолчанию

Вот я вроде бы вполне нормально обработал исключение - когда ниче не вводишь в text.box, но как сделать так чтобы не вводились и отрицательные числа?????
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Variant1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
      
        }

        private double formula(int n, double a)
        {
            double koren = 0;
            int kol=n;
            for (int i = 1; i <= n; i++)
            {
                
                koren += kol * a;
                koren = Math.Sqrt(koren);
                kol--;
            }
            return koren;
        }
        

        private void button1_Click(object sender, EventArgs e)
        {
            int b = 0;
             double otvet = 0, c=0;
             try
             {
                 b = Convert.ToInt32(textBox1.Text);
                 c = Convert.ToDouble(textBox2.Text);
                 otvet = formula(b, c);
                 label4.Text = Convert.ToString(otvet);
             }
             catch (System.FormatException)
             {
                 label4.Text = "Не оставляйте поля пустыми!!!!";
             }
        }

        private void чтоДелатьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Итак, Вы пользователь всё-таки решились запустить данную программу :) \nИтак что с ней делать: \n 1) Введите целочисленное значение в поле n и любое неотрицательное значение в поле а. Внизу указана формула в которую будут подставлены введенные значения \n2)Нажмите <<Вычислить>>. \n3) Будет произведен расчет, и ответ будет выведен ниже надписи <<Ответ>>   ");
        }

        private void обАвтореToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Александров Александр Александрович \nСтудент группы ВМ-082");
        }

        private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Программа для вычисления заданной формулы по дисциплине \"Программирование на ЯВУ С#\"\n ВАРИАНТ №1 ");
        }
        private void выходToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        
    }
}
Винда, KIS 2010, книжка по С/С++, остальное неважно........
StudentPolitech вне форума Ответить с цитированием
Старый 17.09.2010, 11:40   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Опиши событие KeyPress для текстового поля:
Код:
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar < '0') || (e.KeyChar > '9') || (e.KeyChar == '-')) {
                MessageBox.Show("Вводить мона только положительные числа");
                e.KeyChar = (char)0;
            }
        }
Это не единственный вариант но почему бы нет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.09.2010, 12:23   #10
StudentPolitech
Форумчанин
 
Аватар для StudentPolitech
 
Регистрация: 21.11.2008
Сообщений: 400
По умолчанию

Хм...почему то ниче не меняется, единственное, когда стал вводить в поле только минус, он его просто перестал считать символом, но сообщение не выскакивает(((((
Винда, KIS 2010, книжка по С/С++, остальное неважно........
StudentPolitech вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TextBox C# MyXa Общие вопросы .NET 7 26.08.2010 13:25
textbox NARTZISS Общие вопросы .NET 5 19.12.2009 14:21
TextBox в С# Natok Помощь студентам 2 18.05.2009 17:47
TextBox Freeman Общие вопросы C/C++ 3 28.05.2008 00:56