C# WPF / Problem z konwersją lub złym przypisaniem zmiennych


(Kossak) #1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace test
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            int p1 , p2 , p3 , p4 , r_przedmioty;
            p1 = int.Parse(textBox1.Text);
            
                if (p1 == 1)
                {
                    p1 = 0;
                    MessageBox.Show(p1.ToString());
                }
                else if (p1 == 2)
                {
                    p1 = 0;
                    MessageBox.Show(p1.ToString());

                }
                else if (p1 == 3)
                {
                    p1 = 4;
                    MessageBox.Show(p1.ToString());
                }
                else if (p1 == 4)
                {
                    p1 = 6;
                    MessageBox.Show(p1.ToString());
                }
                else if (p1 == 5)
                {
                    p1 = 8;
                    MessageBox.Show(p1.ToString());
                }
                else if (p1 == 6)
                {
                    p1 = 10;
                    MessageBox.Show(p1.ToString());
                }

                //////////////////////////////// Przemiot 1...
                
                p2 = int.Parse(textBox2.Text);
               // p2 = textBox2.Text;

                if (p2 == 1)
                {
                    p2 = 0;
                    MessageBox.Show(p2.ToString());
                }
                else if (p2 == 2)
                {
                    p2 = 0;
                    MessageBox.Show(p2.ToString());
                }
                else if (p2 == 3)
                {
                    p1 = 4;
                    MessageBox.Show(p2.ToString());
                }
                else if (p2 == 4)
                {
                    p1 = 6;
                    MessageBox.Show(p2.ToString());
                }
                else if (p2 == 5)
                {
                    p1 = 8;
                    MessageBox.Show(p2.ToString());
                }
                else if (p2 == 6)
                {
                    p1 = 10;
                    MessageBox.Show(p2.ToString());
                }
       
        
        
        }


        private void Window_Loaded(object sender, RoutedEventArgs e)
        {

        }
    }
}

Ogolnie zamysł jest taki: Są cztery pola tekstowe. Program ma sprawdzić wszystkie pola i ( na razie , bo to prototyp ) wyświetlić na ekranie przez funkcje MessageBox.Show . Ogolnie pisze program dla gimnazjalistow, ktory obliczał by im punkty rekrutacyjne. Wywala mi problem przy konwersji zmiennej p1.

 

W załączniku błąd ze zdjęciem. Dobrze rozumiem, że zła konwersja ?

 

 


(enedil) #2

To nie rozwiązuje Twojego problemu, ale ten program mógłby być krótszy dwukrotnie.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
namespace test
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            int p1 , p2 , p3 , p4 , r_przedmioty;
            p1 = int.Parse(textBox1.Text);
            
                if (p1 == 2)
                {
                    p1 = 0;
                    MessageBox.Show(p1.ToString());
                }
                else 
                {
                    p1 = 2 * (p1 - 1);
                    MessageBox.Show(p1.ToString());
                }
 
                //////////////////////////////// Przemiot 1...
                
                p2 = int.Parse(textBox2.Text);
                // p2 = textBox2.Text;
 
                if (p2 == 2)
                {
                    p2 = 0;
                    MessageBox.Show(p2.ToString());
                }
                else 
                {
                    p2 = 2 * (p2 - 1);
                    MessageBox.Show(p2.ToString());
                }
       
        }
 
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
 
        }
    }
}

(Kossak) #3

Dzięki ! 


(Edgarus) #4

Primo, jaki konkretnie błąd.

Secundo, czemu wpf skoro nie korzystasz z takich fajnych rzeczy jak Dependency Property, konwertery itd.

Tertio, skoro masz pole tekstowe, do którego można wpisać wszystko to zamiast:

int p1 = int.Parse(jakisTextbox.Text)

użyj:

int liczba;
bool parseResult = int.TryParse(textbox.Text, out liczba);
if (parseResult)
{
  // tu wiesz, że konwersja się udała i w zmiennej liczba masz inta
}
else
{
  MessageBox.Show("Nie bangla");
}

Unikniesz dziwnych błędów, a do tego masz fajny początek na komunikaty.


(Kossak) #5

Edgarus. Dzięki, już rozwiązałem problem. Czasem miewam w VS “dziwne” problemy. Ogólnie kod był dobry, przepisałem go troszkę jak polecił kolega z pierwszej odpowiedzi. No i to były moje pierwsze kroki. Dzięki za odpowiedzi!