2013-10-25 4 views
2

что я пытаюсь сделать, получить пользовательский ввод из текстового поля, преобразовать его в int и затем использовать это. Я получил все, чтобы работать, кроме попытки и уловки. если человек ставит букву вместо числа. с кодом ниже он всегда что-то ловит. я понятия не имею, что ловит что-то. я вынул тест bool, и если я вложу письмо, он просто выбросит исключение, а затем перейдет к звуку. другой, ожидающий действительного ввода. , пожалуйста, извините мой грязный код, я все еще начинающий программист на C#: D спасибо в продвинутом!Попытайтесь поймать, всегда поймать исключение

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace WindowsFormsApplication4 
{ 
public partial class Form1 : Form 
{ 
    bool tone = false; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     bool test = true; 
     speedInput.Clear(); 
     beep.Clear(); 
     int beepspeed = 90; 
     int speed = 100; 
     string speedtext = this.speedInput.Text; 
     string beeptext = this.beep.Text; 
     try 
     { 
      test = true; 
      beepspeed = Convert.ToInt32(beeptext); 
      speed = Convert.ToInt32(speedtext); 
     } 
     catch (Exception) 
     { 
      MessageBox.Show("numbers above 37 only!!"); 
      test = false; 
     } 

     if (test) 
     { 
      for (int i = 0; i < beepspeed; i++) 
      { 
       if (this.tone) 
       { 
        Random ran = new Random(); 
        int rand = ran.Next(400, 3000); 
        Console.Beep(rand, speed); 
       } 
       else 
       { 
        Console.Beep(1000, speed); 
       } 
      } 
     } 
    } 

    private void radioButtonYes_CheckedChanged(object sender, EventArgs e) 
    { 
     this.tone = true; 
    } 

    private void radioButtonNo_CheckedChanged(object sender, EventArgs e) 
    { 
     this.tone = false; 
    } 
} 
} 
+1

Как новичок, Я бы начал и начал печатать исключение. – Ofiris

+1

Поместите точку останова в блок catch, затем, когда она попадет в точку останова, наведите указатель мыши на подчеркивание рядом со словом Exception. Вы должны быть в состоянии подтянуть некоторые детали исключения, сообщение и stacktrace было бы здорово опубликовать. –

ответ

5

Вы чистите содержание входов в начале button1_Click

speedInput.Clear(); 
beep.Clear(); 

Тогда при попытке преобразовать пустую строку в int32 она не

beepspeed = Convert.ToInt32(beeptext); 
speed = Convert.ToInt32(speedtext); 
+3

Терри Пратчетт: «Дайте человеку огонь, и он согреет в течение дня, но подожгёт его, и он дождей до конца своей жизни» –

+0

Вау, я положил это на некоторые испытания, забыл об этом .. тогда это приходит back to bit me .. lol спасибо за исправление :) – hurnhu

+1

@JimW, Anonymous - «Четыре глаза видят больше двух» :) –

Смежные вопросы