2015-12-01 32 views
0

編程很新,我需要幫助來解決問題。啓動我的程序後,它會說程序已停止響應並立即關閉。下面是代碼本身:執行代碼會使程序停止響應

XAML

<Window x:Class="WpfApplication6.Window2" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window2" Height="300" Width="587.615"> 
<Grid> 
    <Label Content="Programme de devinette" HorizontalAlignment="Left" Margin="144,10,0,0" VerticalAlignment="Top" Width="355" Height="56" FontSize="22" FontFamily="Segoe WP Black"/> 
    <TextBox HorizontalAlignment="Left" Name="BoiteChiffre" Height="23" Margin="228,103,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" TextChanged="TextBox_TextChanged"/> 
    <Label Content="Entrez un chiffre" HorizontalAlignment="Left" Margin="216,66,0,0" VerticalAlignment="Top" Width="164" FontSize="18"/> 
    <Button Content="Nombre random" HorizontalAlignment="Left" Margin="77,160,0,0" VerticalAlignment="Top" Width="109" Click="Button_Click"/> 
    <Button Content="Verification" HorizontalAlignment="Left" Margin="424,160,0,0" VerticalAlignment="Top" Width="75" RenderTransformOrigin="-0.055,0.428" Click="Button_Click_2"/> 
    <Button Content="Quitter" HorizontalAlignment="Left" Margin="253,201,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/> 

</Grid> 

,這是與該窗口相關的代碼:

namespace WpfApplication6 
{ 
/// <summary> 
/// Logique d'interaction pour Window2.xaml 
/// </summary> 
public partial class Window2 : Window 
{ 
    public Window2() 
    { 
     InitializeComponent(); 
    } 
    int random1; 
    private void Button_Click(object sender, RoutedEventArgs e) //random 
    { 
     Random chiffrealeatoire = new Random(); 
     random1 = (chiffrealeatoire.Next(0, 20)); 
    } 

    private void Button_Click_1(object sender, RoutedEventArgs e) //quit 
    { 
     Application.Current.Shutdown(); 
    } 

    private void Button_Click_2(object sender, RoutedEventArgs e) //veri 
    { 

    } 

    private void TextBox_TextChanged(object sender, TextChangedEventArgs e) 
    { 
     if (Convert.ToInt32(BoiteChiffre.Text) < random1) 
     { 
      MessageBox.Show("Too low"); 
     } 
     if (Convert.ToInt32(BoiteChiffre.Text) > random1) 
     { 
      MessageBox.Show("Too high"); 
     } 
     else 
     { 
      MessageBox.Show("Congratulations");   
     } 
    } 
} 

的代碼應該有3個按鈕:一個是退出程序,一個在點擊時指定0-20之間隱藏的隨機數字(用戶必須猜測這個數字),一個用來檢查用戶輸入的數字是否與隨機生成的數字匹配編號。如果號碼不匹配,程序會告訴用戶他的號碼是否太高而太低。正如我前面說過的,我的程序在啓動後崩潰了,我找不到問題所在。所有幫助appriciated,謝謝。

PS:窗口看起來是這樣的

enter image description here

+2

乍一看,它看起來像一個未處理的異常。你應該嘗試在你的'TextBox_TextChanged'事件處理程序周圍添加一個[try-catch](https://msdn.microsoft.com/en-us/library/0yd65esw.aspx)塊 –

+1

@MatiasCicero我建議你發佈後一個答案,因爲這是問題。TextChanged事件將在加載表單並將「TextBox」(默認文本)寫入TextBox時引發(並導致異常)。 –

+0

Avast與這有什麼關係?我在沒有Avast的另一臺計算機上運行這個程序,得到了相同的結果。 –

回答

0

下面的代碼塊做兩件事情:

  1. 它移動你的邏輯從private void TextBox_TextChanged(object sender, TextChangedEventArgs e)private void Button_Click_2(object sender, RoutedEventArgs e) //veri,因爲你不希望驗證每一次的文本只有當用戶點擊「驗證」按鈕時纔會更改。
  2. Convert.ToInt32被替換爲int.TryParse,它返回一個布爾值(true/false),表示它是否成功地將文本轉換爲整數(int)並將其寫入num變量(true),或者如果它未能成功所以(錯誤)。由於int.TryParse未能轉換,因此return;強制該功能結束執行。

您可能希望將其更改爲這樣的事情,而不是:

private void Button_Click_2(object sender, RoutedEventArgs e) //veri 
{ 
    int num; 
    if (!int.TryParse(BoiteChiffre.Text, out num)) 
    { 
     MessageBox.Show("Must enter an integer"); 
    } 
    else if (num < random1) 
    { 
     MessageBox.Show("Too low"); 
    } 
    else if (num > random1) 
    { 
     MessageBox.Show("Too high"); 
    } 
    else 
    { 
     MessageBox.Show("Congratulations"); 
    } 
} 

順便說一句,在WPF有一些更好的方法做驗證和更好的用戶體驗,你可以在google WPF驗證你自己。我幫你搜索一些:

+0

考慮添加對_why_ OP的代碼失敗的解釋,並且_how_您的答案可以解決此問題 – MickyD

+0

這似乎解決了即時崩潰問題,第二條和第三條代碼究竟做了什麼?儘管它確實解決了崩潰問題,但還是會出現另一個問題。即使我沒有點擊驗證,程序會在我輸入一個號碼後立即驗證號碼是否正確。任何想法如何解決它? –

+0

@ Dr.Roflcopter,你可以從我更新的答案中的一些鏈接中學習。 –

-1

我想在這裏,你可能需要設置在BoiteChiffre字段的默認值。 將其設置爲0,並確保該代碼不會被執行,如果該字段爲空或不是數字。 您可以更好地利用Int23.tryparse(),而不是轉換()

+0

您是否因爲認識他或事端而對我投票?我的答案是正確的,更快一分鐘。 – Dohab

+0

我投你一票,因爲你的回答沒有解決問題。已經設置了默認值**。 –

+0

你必須閱讀整個答案,我說:「將其設置爲0,並確保如果該字段爲空或不是數字,則不會執行代碼」。 – Dohab