Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
86 / 86 / 36
Регистрация: 27.11.2011
Сообщений: 713
1

Обработка исключений

25.03.2013, 18:36. Просмотров 1182. Ответов 17
Метки нет (Все метки)

Здравствуйте форумчане!не могу догнать как сделать так, что бы пока все условия не будут соблюдены программа не выходила из метода?


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
  public void Begin_Kosat()
        {
            
                if (KorenA.Text == "" && KorenB.Text == "")
                {
                    MessageBox.Show("Вы забыли ввести корни уравнения!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    
                }
 
 
                if (textBox1_Kasat.Text == "" && textBox2_Kasat.Text == "" && textBox4_Kasat.Text == "")
                {
                    MessageBox.Show("Вы забыли ввести значения производной!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                }
                if (comboBox1_Kasat.Text == "")
                {
 
                    MessageBox.Show("Вы забыли расставить знаки!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                }
 
        }
 
 
        public void Kosatelnoi()
        {
            Begin_Kosat();
                double a = Convert.ToDouble(KorenA.Text);
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2013, 18:36
Ответы с готовыми решениями:

Обработка исключений
Нужно добавить исключение на ввод некорректных данных.К примеру я ввожу критерий поиска,а его нет в...

обработка исключений
Разработать приложение Windows Forms, реализующее обработку различных исключений Format Exception,...

Обработка исключений
Здравствуйте!!! У меня есть несколько классов в них обрабатывается вводимая с формы информация....

Обработка исключений
Проблема состоит в том, что после того, как я в поле "Доля от сделки" ввожу не число а букву, то...

17
4 / 4 / 0
Регистрация: 14.03.2013
Сообщений: 29
25.03.2013, 18:55 2
А зачем Вам "Не выходить из метода"??
Он же очевидно вызывается каким то событием?
Вот и поставьте выполнение этого метода по этому событию.

Что вы вообще хотите сделать непонятно
1
86 / 86 / 36
Регистрация: 27.11.2011
Сообщений: 713
25.03.2013, 19:47  [ТС] 3
мне нужно что бы программа выдавала ошибки пока все поля не заполненны.

Добавлено через 21 минуту
double a = Convert.ToDouble(KorenA.Text); подчеркивает эту строчку!
0
Эксперт .NET
4315 / 1976 / 385
Регистрация: 27.03.2010
Сообщений: 5,427
Записей в блоге: 1
25.03.2013, 20:01 4
после каждого MessageBox поставь return
1
86 / 86 / 36
Регистрация: 27.11.2011
Сообщений: 713
25.03.2013, 20:04  [ТС] 5
уже пробовал тоже самое(
0
Эксперт .NET
4315 / 1976 / 385
Регистрация: 27.03.2010
Сообщений: 5,427
Записей в блоге: 1
25.03.2013, 20:06 6
Цитата Сообщение от jecus Посмотреть сообщение
уже пробовал тоже самое(
Что тоже самое? Без кода ничего не понятно, что там у тебя происходит. То что ты выложил это мало, не понятно что откуда вызывается и вообще что происходит.

Добавлено через 26 секунд
Цитата Сообщение от jecus Посмотреть сообщение
double a = Convert.ToDouble(KorenA.Text); подчеркивает эту строчку!
Что пишет?
0
86 / 86 / 36
Регистрация: 27.11.2011
Сообщений: 713
25.03.2013, 20:09  [ТС] 7
Пишет ,что входная строка имеет неизвестный формат!

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
  public void Begin_Kosat()
        {
                if (KorenA.Text == "" && KorenB.Text == "")
                {
                    MessageBox.Show("Вы забыли ввести корни уравнения!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }
 
                if (textBox1_Kasat.Text == "" && textBox2_Kasat.Text == "" && textBox4_Kasat.Text == "")
                {
                    MessageBox.Show("Вы забыли ввести значения производной!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    return; 
                }
                if (comboBox1_Kasat.Text == "")
                {
 
                    MessageBox.Show("Вы забыли расставить знаки!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }
                Kosatelnoi();
        }
 
 
        public void Kosatelnoi()
        {
 
                double a = Convert.ToDouble(KorenA.Text);
                double b = Convert.ToDouble(KorenB.Text);
 
                double chislo4 = Convert.ToDouble(textBox1_Kasat1.Text);
 
                double stepen1 = Convert.ToDouble(textBox2.Text);
                double stepen2 = Convert.ToDouble(textBox3.Text);
                double chislo1 = Convert.ToDouble(textBox1.Text);
                double chislo2 = Convert.ToDouble(textBox4.Text);
                double chislo3 = Convert.ToDouble(textBox5.Text);
 
 
 
                switch (comboBox1.Text)
                {
                    case "+": fA = chislo1 * (Math.Pow(a, stepen1)) + chislo2 * (Math.Pow(a, stepen2)); break;
                    case "-": fA = chislo1 * (Math.Pow(a, stepen1)) - chislo2 * (Math.Pow(a, stepen2)); break;
                }
                switch (comboBox2.Text)
                {
                    case "+": c = fA + chislo3; break;
                    case "-": c = fA - chislo3; break;
                }
                proizvodnaiaA2 = a * chislo4;
 
 
 
                switch (comboBox1.Text)
                {
                    case "+": fB = chislo1 * (Math.Pow(b, stepen1)) + chislo2 * (Math.Pow(b, stepen2)); break;
                    case "-": fB = chislo1 * (Math.Pow(b, stepen1)) - chislo2 * (Math.Pow(b, stepen2)); break;
                }
                switch (comboBox2.Text)
                {
                    case "+": z = fB + chislo3; break;
                    case "-": z = fB - chislo3; break;
                }
                proizvodnaiaB2 = b * chislo4;
0
Эксперт .NET
4315 / 1976 / 385
Регистрация: 27.03.2010
Сообщений: 5,427
Записей в блоге: 1
25.03.2013, 20:27 8
Ну значит там не число. Либо текст, либо пустая строка. Используй

C#
1
2
3
4
5
6
            double number;
            if (double.TryParse(Text, out number))
            {
                MessageBox.Show("Бла-бла-бла");
                return;
            }
Добавлено через 46 секунд
Я бы на твоём месте в метод Kosatelnoi() передавал уже полученные значения с контролов, а не в нём же с контролов их получал, как сейчас ты.
0
7363 / 4091 / 1628
Регистрация: 11.02.2013
Сообщений: 8,760
Завершенные тесты: 3
25.03.2013, 20:27 9
подключи System.Linq и можно так, записав в свойство Tag сообщение об ошибке для этого контрола:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        private void button3_Click(object sender, EventArgs e)
        {
            ValidateFields();
        }
        private void ValidateFields()
        {
            foreach (TextBox tb in this.Controls.OfType<TextBox>().Where(text => text.TextLength == 0))
            {
                MessageBox.Show(tb.Tag.ToString(),"Поле не заполнено",MessageBoxButtons.OK,MessageBoxIcon.Error);
                tb.Focus();
                break;
            }
        }
или без Linq не так изящно, но для любого фреймворка:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        private void button3_Click(object sender, EventArgs e)
        {
            ValidateFields();
        }
        private void ValidateFields()
        {
            foreach (Control ctrl in this.Controls)
            {
                if (ctrl.GetType() == typeof(TextBox))
                {
                    MessageBox.Show((ctrl as TextBox).Tag.ToString(), "Поле не заполнено", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    ctrl.Focus();
                    break;
                }
                else if(ctrl.GetType()==typeof(ComboBox))
                    MessageBox.Show((ctrl as ComboBox)..Tag.ToString(), "Поле не заполнено", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    ctrl.Focus();
                    break;
            }
        }
0
86 / 86 / 36
Регистрация: 27.11.2011
Сообщений: 713
25.03.2013, 20:37  [ТС] 10
ViterAlex,что то я не понял.
0
Эксперт .NET
4315 / 1976 / 385
Регистрация: 27.03.2010
Сообщений: 5,427
Записей в блоге: 1
25.03.2013, 20:44 11
Во втором примере ошибка со скобками.

Добавлено через 3 минуты
И в первом тоже. Вообще, тогда уж не кол-во символов проверять, а методом string.IsNullOrWhiteSpace

Добавлено через 3 минуты
Если хочешь скинь проект, я по нормальному сделаю. Пока делать нечего и есть настроение что-то делать .
1
7363 / 4091 / 1628
Регистрация: 11.02.2013
Сообщений: 8,760
Завершенные тесты: 3
25.03.2013, 20:47 12
Цитата Сообщение от jecus Посмотреть сообщение
ViterAlex,что то я не понял.
Что ты не понял? Тебе нужно проверить, пусты ли текстовые поля и комбобоксы. Я дал тебе два варианта как это сделать. Что ещё?
0
Эксперт .NET
4315 / 1976 / 385
Регистрация: 27.03.2010
Сообщений: 5,427
Записей в блоге: 1
25.03.2013, 20:49 13
ViterAlex, Вот чуть поправил ошибки, просто у него даже компилиться не будет:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        private void ValidateFields()
        {
            foreach (Control ctrl in this.Controls)
            {
                if (ctrl.GetType() == typeof(TextBox))
                {
                    MessageBox.Show((ctrl as TextBox).Tag.ToString(),
                        "Поле не заполнено", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    ctrl.Focus();
                    break;
                }
                else if (ctrl.GetType() == typeof(ComboBox))
                {
                    MessageBox.Show((ctrl as ComboBox).Tag.ToString(), 
                        "Поле не заполнено", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    ctrl.Focus();
                    break;
                }
            }
        }
 
        private void ValidateFields()
        {
            foreach (TextBox tb in Controls.OfType<TextBox>()
                .Where(tb => string.IsNullOrWhiteSpace(tb.Text)))
            {
                MessageBox.Show(tb.Tag.ToString(), "Поле не заполнено", MessageBoxButtons.OK, MessageBoxIcon.Error);
                tb.Focus();
                break;
            }
        }
1
86 / 86 / 36
Регистрация: 27.11.2011
Сообщений: 713
25.03.2013, 20:55  [ТС] 14
Casper-SC, скинул в личку!
0
Эксперт .NET
4315 / 1976 / 385
Регистрация: 27.03.2010
Сообщений: 5,427
Записей в блоге: 1
25.03.2013, 21:42 15
У тебя в проекте 4 абсолютно одинаковых конпки и определено для них 4 абсолютно одинаковых стиля, то есть 4 стиля с разными именами ключей в словаре . Зато у окна Background задан напрямую через свойство. ТАм косяков километр.

Добавлено через 5 минут
Вот тебе простой стиль для окна и любых бэкграундов, у которых должен быть цвет, как у фона окна. Используй в стилях SolidColorBrush, а не цвет руками заданный:
XML
1
2
3
4
5
    <SolidColorBrush x:Key="BackgroundBrush" Color="#FF333333"/>
    
    <Style x:Key="WindowStyle" TargetType="Window">
        <Setter Property="Background" Value="{StaticResource BackgroundBrush}"/>
    </Style>
Добавлено через 29 минут
У тебя там какой-то косяк непонятно с чем, что-то ты там намутил в бленде, у тебя стили и в XAML окна (в его ресурсах) и в отдельном файле, половина не используется. Я тебе дам совет, просто прочитай книжку по WPF для начинающих для начала, поймёшь про всякие контейнеры, что и как. Вот я бы поместил все кнопки и прочее в контейнер и делал проверку примерно, как показал ViterAlex. Ща закину элементы управления в контейнер и напишу проверки, показ сообщения и т.д.
0
ViterAlex
25.03.2013, 21:42
  #16

Не по теме:

:facepalm:Там ещё и WPF, а в разделе WinForms

0
Эксперт .NET
4315 / 1976 / 385
Регистрация: 27.03.2010
Сообщений: 5,427
Записей в блоге: 1
25.03.2013, 22:06 17
Я про косяки со стилями написал к тому, что у тебя не поймёшь, что там где определено, что где есть, просто всё запутано.

Добавлено через 11 минут
Короче, вот так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
        public void Begin()
        {
            bool error = false;
            foreach (UIElement element in uiElContainer.Children)
            {
                if (element is TextBox)
                {
                    TextBox tb = element as TextBox;
                    if (string.IsNullOrWhiteSpace(tb.Text) || tb.Text.All(ch => !char.IsDigit(ch)))
                    {
                        ShowMessage(tb, "Введите значение");
                        error = true;
                        break;
                    }
                }
                else if (element is ComboBox)
                {
                    ComboBox cb = element as ComboBox;
                    if (cb.SelectedIndex == -1)
                    {
                        ShowMessage(cb, "Вы забыли поставить знак!");
                        error = true;
                        break;
                    }
                }
            }
            if (error)
                return;
 
            double stepen1 = Convert.ToDouble(textBox2.Text);
            double stepen2 = Convert.ToDouble(textBox3.Text);
            double chislo1 = Convert.ToDouble(textBox1.Text);
            double chislo2 = Convert.ToDouble(textBox4.Text);
            double chislo3 = Convert.ToDouble(textBox5.Text);
 
 
            Uravnenie(stepen1, stepen2, chislo1, chislo2, chislo3);
        }
 
        public void ShowMessage(UIElement element, string message)
        {
            MessageBox.Show(this, message, "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
            element.Focus();
        }
 
        private void button_Click(object sender, RoutedEventArgs e)
        {
            Begin();
        }
 
        public void Uravnenie(double stepen1, double stepen2, double chislo1, double chislo2, double chislo3)
        {
         //---------------------
        }
Добавлено через 1 минуту
Чтобы у сообщения, которое говорит об ошибке был стиль у кнопки, а не убогий квадрат времён 90-ых, нужно добавить в проект манифест и раскомментировать там несколько строк, там всё понятно написано.

Добавлено через 3 минуты
В общем скинул ссылку на проект в личку. А вообще там ничего такого нет, чтобы не показывать его другим. Проще с нуля сделать, чем его переделывать.

Добавлено через 5 минут
Вообще, если делать по уму, я бы вообще сделал запрет на ввод всего, кроме чисел, ограничил бы кол-во вводимых символов в текстовое поле. Окно, чтобы в центре экрана появлялось (почему-то практически все игнорируют это).
0
4 / 4 / 0
Регистрация: 14.03.2013
Сообщений: 29
26.03.2013, 12:49 18
Цитата Сообщение от jecus Посмотреть сообщение
Пишет ,что входная строка имеет неизвестный формат!
У вас изначально, на мой взгляд, не правильно архитектура построена.
Допустим у Вас есть событие, клик по кнопке, по которому происходит все что вы тут написали.

C#
1
2
3
4
5
6
7
8
9
        
private void button1_Click(object sender, EventArgs e)
{
      if(this.Begin_Kosat())
        {
         this.Kosatelnoi();
         }
 
}
метод Begin_Kosat(), переделываем следующим образом.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  public bool Begin_Kosat()
        {
            bool test = true;
                if (KorenA.Text == "" && KorenB.Text == "")
                {
                    MessageBox.Show("Вы забыли ввести корни уравнения!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                     test = false;
                }
 
                if (textBox1_Kasat.Text == "" && textBox2_Kasat.Text == "" && textBox4_Kasat.Text == "")
                {
                    MessageBox.Show("Вы забыли ввести значения производной!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                     test = false;
                }
                if (comboBox1_Kasat.Text == "")
                {
 
                    MessageBox.Show("Вы забыли расставить знаки!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
                    test = false;
                }
                return test;
        }
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2013, 12:49

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Обработка исключений
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;...

Обработка исключений для textbox
У меня 3 текст бокса. Я хочу, чтобы нельзя было вводить буквы, а также значение а больше 3,...

Обработка исключений при запуске процесса
Добрый день. С C# работаю крайне малое время. Из моей программы планируется запускать другие...

Обработка исключений для изменения строки
private void button1_Click(object sender, EventArgs e) { stroka =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.