#c#
#c#
Вопрос:
Итак, я создал функцию ParseandWarn, чтобы открыть окно сообщения, если ввод не является целым числом. Если это целое число, сумма обоих входных данных должна быть вычислена для события щелчка. Существует несколько вычислений, поэтому я создал функцию. Как мне реализовать / активировать эту функцию в событии щелчка?Я получаю сообщение об ошибке, возможно, синтаксический анализ? Я новичок в программировании, любая помощь приветствуется.
public void ParseandWarn()
{
int Invoergetal1, Invoergetal2;
if (!int.TryParse(txtGetal1.Text, out Invoergetal1))
{
MessageBox.Show("U dient een geheel getal in te voeren!", "Fout", MessageBoxButton.OK, MessageBoxImage.Error);
}
else
{
if (!int.TryParse(txtGetal2.Text, out Invoergetal2))
{
MessageBox.Show("U dient een geheel getal in te voeren!", "Fout", MessageBoxButton.OK, MessageBoxImage.Error);
}
else
{
return;
}
}
}
private void btnSom_Click(object sender, RoutedEventArgs e)
{
int BerekenSom = int.Parse(txtGetal1.Text) int.Parse(txtGetal2.Text);
txtResultaat.Text = "De som van " txtGetal1.Text " en " txtGetal2.Text " = " BerekenSom Environment.NewLine;
}
Комментарии:
1. Вы пробовали вызывать функцию внутри обработчика событий?
2. Ну, я не знаю, как это сделать «правильным» способом…
3. ParseAndWarn();
4. Я сделал это, но после этого получаю исключение FormatException …
5. Можете ли вы опубликовать трассировку стека FormatException?
Ответ №1:
Это будет код, который вы ищете.
Я использовал ref
ссылку as в функции ParseandWarn
, которая указывает, что параметры будут изменены по ссылке.
public bool ParseandWarn(ref int Invoergetal1, ref int Invoergetal2){
bool valid = false;
if ((!int.TryParse(txtGetal1.Text, out Invoergetal1) || !int.TryParse(txtGetal2.Text, out Invoergetal2)) {
MessageBox.Show("U dient een geheel getal in te voeren!", "Fout", MessageBoxButton.OK, MessageBoxImage.Error);
return false;
}
return true;
}
private void btnSom_Click(object sender, RoutedEventArgs e)
{
int Invoergetal1, Invoergetal2;
bool correctInput = ParseAndWarn(ref Invoergetal1, ref Invoergetal2);
if(correctInput)
{
int BerekenSom = Invoergetal1 Invoergetal2;
txtResultaat.Text = "De som van " txtGetal1.Text " en " txtGetal2.Text " = " BerekenSom Environment.NewLine;
}
}
Мы передаем два ints
в функцию, получаем результат TryParse
метода, если он завершится неудачей, вместо этого они будут содержать ноль.
Теперь обработчик событий будет иметь значения, и путем вычисления суммы двух переменных будет получен результат.
Отредактируйте дополнительные проверки на наличие недопустимых входных данных или null
оставьте в качестве упражнения.
Комментарии:
1. Спасибо, что нашли время, чтобы помочь, и спасибо за четкие объяснения.
Ответ №2:
Сначала вы запускаете ParseAndWarn(). Следующие две строки должны выполняться только в том случае, если метод ParseAndWarn обнаружил два правильных числовых ввода. Один из способов сделать это — позволить методу ParseAndWarn возвращать логическое значение, указывающее, прошел ли синтаксический анализ успешно
public bool ParseandWarn()
{
int Invoergetal1, Invoergetal2;
if (!int.TryParse(txtGetal1.Text, out Invoergetal1) || !int.TryParse(txtGetal2.Text, out Invoergetal2)
{
MessageBox.Show("U dient een geheel getal in te voeren!", "Fout", MessageBoxButton.OK, MessageBoxImage.Error);
return false;
}
return true;
}
private void btnSom_Click(object sender, RoutedEventArgs e)
{
bool correctInput = ParseAndWarn();
if(correctInput)
{
int BerekenSom = int.Parse(txtGetal1.Text) int.Parse(txtGetal2.Text);
txtResultaat.Text = "De som van " txtGetal1.Text " en " txtGetal2.Text " = " BerekenSom Environment.NewLine;
}
}
Вы также можете объединить все это в своем событии щелчка, чтобы избежать необходимости разбора дважды
private void btnSom_Click(object sender, RoutedEventArgs e)
{
int Invoergetal1, Invoergetal2;
if (!int.TryParse(txtGetal1.Text, out Invoergetal1) || !int.TryParse(txtGetal2.Text, out Invoergetal2)
{
MessageBox.Show("U dient een geheel getal in te voeren!", "Fout", MessageBoxButton.OK, MessageBoxImage.Error);
}
else
{
int BerekenSom = Invoergetal1 Invoergetal2;
txtResultaat.Text = "De som van " Invoergetal1 " en " Invoergetal2 " = " BerekenSom Environment.NewLine;
}
}
Комментарии:
1. Спасибо! Я не хочу объединять, потому что у меня есть несколько кликов (сумма, продукт, …).