NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: WPF - SelectedChanged metoda - objekt nebol vytvoreny

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
joci
Člen
Avatar
joci:7.7.2015 6:23

Caute, mam, taky problem s WPF ComboBoxom;
V konstruktore Window si vytvorim objekt, napr. A, ale ked chcem nastavit hodnotu nejakej vlastnosti (A.property) v handleri pre ComboBox SelectedChanged(), vypise mi chybu ze na referencii objektu nebola vytvorena instancia. Co s tym ? Fakt netusim v com moze byt problem.

Odpovědět
7.7.2015 6:23
Svet patrí tím, ktorí sa neposerú.
Avatar
Majkel
Člen
Avatar
Majkel:7.7.2015 6:50

Hoď sem ten kód, který ti to dělá.

 
Nahoru Odpovědět
7.7.2015 6:50
Avatar
Odpovídá na joci
Jakub Lásko[Saarix]:7.7.2015 9:03

Majkel má pravdu bez toho kódu ti moc neporadíme, hoď sem kód té page kde máš ten error.

Nahoru Odpovědět
7.7.2015 9:03
Časem je vše možné.
Avatar
joci
Člen
Avatar
joci:7.7.2015 17:16

tak teda tu je:

public partial class MainWindow : Window
{

    Language language;
     Converter<LenghtUnit> converterLength;
     Converter<WeightUnit> converterWeight;
     Converter<DataUnit> converterData;

    List<Language> languages;

    Regex numberFormat;
    Match checkNumberFormat;

    public MainWindow()
    {
        InitializeComponent();



        //nacitanie jazykov
        language = new Language();
        language.LoadLanguages();
        //ulozenie dostupnych jazykov
        languages = language.GetLanguages();
        //pridanie jazykov do ComboBoxu
        language.AddLanguages(LanguagesBox);

        converterLength = new Converter<LenghtUnit>();
        converterWeight = new Converter<WeightUnit>();
        converterData = new Converter<DataUnit>(); //<-- Tu vytvorenie

        numberFormat = new Regex(@"^\d+[\. | ,]?\d+$");




        switch (inputLengthBox.SelectedValue.ToString())
        {                                                   //tu to funguje
            case "System.Windows.Controls.ComboBoxItem: mm": converterLength.InputUnit = LenghtUnit.MM; break;
            case "System.Windows.Controls.ComboBoxItem: cm": converterLength.InputUnit = LenghtUnit.CM; break;
            case "System.Windows.Controls.ComboBoxItem: m": converterLength.InputUnit = LenghtUnit.M; break;
            case "System.Windows.Controls.ComboBoxItem: km": converterLength.InputUnit = LenghtUnit.KM; break;
        }






    }

    //Length ComboBox
    private void inputLengthBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        switch (inputLengthBox.SelectedValue.ToString())
        {                                                   //tu uz nie :
                                                            //An exception of type 'System.NullReferenceException' occurred in PrevodnikJednotiek.exe but was not handled in user code

                                                            //Additional information: Object reference not set to an instance of an object.
            case "System.Windows.Controls.ComboBoxItem: mm": converterLength.InputUnit = LenghtUnit.MM; break;
            case "System.Windows.Controls.ComboBoxItem: cm": converterLength.InputUnit = LenghtUnit.CM; break;
            case "System.Windows.Controls.ComboBoxItem: m": converterLength.InputUnit = LenghtUnit.M; break;
            case "System.Windows.Controls.ComboBoxItem: km": converterLength.InputUnit = LenghtUnit.KM; break;
        }
    }
Nahoru Odpovědět
7.7.2015 17:16
Svet patrí tím, ktorí sa neposerú.
Avatar
Majkel
Člen
Avatar
Majkel:8.7.2015 12:40

Vytvoř si událost Initialized (případně Loaded) na MainWindow a vyzkoušej to inicializovat tam, namísto v konstruktoru.

Editováno 8.7.2015 12:43
 
Nahoru Odpovědět
8.7.2015 12:40
Avatar
joci
Člen
Avatar
Odpovídá na Majkel
joci:8.7.2015 15:27

Ok, vyskusam a dam vediet.

Nahoru Odpovědět
8.7.2015 15:27
Svet patrí tím, ktorí sa neposerú.
Avatar
joci
Člen
Avatar
Odpovídá na joci
joci:9.7.2015 19:49

Dal som to do MainWindow_Loaded, ale nepomohlo.

Nahoru Odpovědět
9.7.2015 19:49
Svet patrí tím, ktorí sa neposerú.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na joci
Jan Vargovský:9.7.2015 19:52

Dej si tam nullcheck na SelectedValue.

 
Nahoru Odpovědět
9.7.2015 19:52
Avatar
joci
Člen
Avatar
Odpovídá na Jan Vargovský
joci:9.7.2015 22:10

Ale selectedValue nemam nulovy, nulovy je objekt converterLength v metode SelectionChanged.

Nahoru Odpovědět
9.7.2015 22:10
Svet patrí tím, ktorí sa neposerú.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na joci
Jan Vargovský:9.7.2015 22:14

Nám pošli celý kód. Jen tak ti instance zmizet nemůže :D

 
Nahoru Odpovědět
9.7.2015 22:14
Avatar
Jakub Lásko[Saarix]:10.7.2015 7:16

Je to zvláštní no, bez celého kódu to asi nepude. Takhle jak to tam máš by to mělo fungovat. Otázka nyní je, jestli v nějakém mezikroku co tu nevidíme se to rozhodí.

Anarchie instancí :-)

Nahoru Odpovědět
10.7.2015 7:16
Časem je vše možné.
Avatar
joci
Člen
Avatar
joci:11.7.2015 20:11

Tu je celý kód:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
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;
using System.Xml;
using System.Globalization;
using System.Threading;

namespace PrevodnikJednotiek
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        Language language;
         Converter<LenghtUnit> converterLength;
         Converter<WeightUnit> converterWeight;
         Converter<DataUnit> converterData;

        List<Language> languages;

        Regex numberFormat;
        Match checkNumberFormat;

        public MainWindow()
        {

            converterLength = new Converter<LenghtUnit>();
            converterWeight = new Converter<WeightUnit>();
            converterData = new Converter<DataUnit>(); //<-- Tu vytvorenie

            InitializeComponent();

            //nacitanie jazykov
            language = new Language();
            language.LoadLanguages();
            //ulozenie dostupnych jazykov
            languages = language.GetLanguages();
            //pridanie jazykov do ComboBoxu
            language.AddLanguages(LanguagesBox);


            numberFormat = new Regex(@"^\d+[\. | ,]?\d+$");

            #region nastavenie jazyka pre GUI

            foreach (Language lang in languages)
            {
                if (lang.LangID.Contains(language.SystemLanguage))
                {
                    language.ChangeLanguage(lang.LangID, ConvertBTN, languageTB); // zmeni jazyk GUI
                    break;
                }
                else
                {
                    language.ChangeLanguage("SK", ConvertBTN, languageTB); // zmeni jazyk GUI
                }
            }

            #endregion

            #region nastavenie defaultnych hodnot comboboxu



            switch (inputLengthBox.SelectedValue.ToString())
            {                                                   //tu to funguje
                case "System.Windows.Controls.ComboBoxItem: mm": converterLength.InputUnit = LenghtUnit.MM; break;
                case "System.Windows.Controls.ComboBoxItem: cm": converterLength.InputUnit = LenghtUnit.CM; break;
                case "System.Windows.Controls.ComboBoxItem: m": converterLength.InputUnit = LenghtUnit.M; break;
                case "System.Windows.Controls.ComboBoxItem: km": converterLength.InputUnit = LenghtUnit.KM; break;
            }




            #endregion

        }
        private void Convert_Click(object sender, RoutedEventArgs e)
        {
            if (!inputLength.Text.ToString().Equals(""))
            {
                checkNumberFormat = numberFormat.Match(inputLength.Text.ToString());
                if (checkNumberFormat.Success)
                    converterLength.InputValue = Double.Parse(inputLength.Text.Replace(',', '.'), NumberStyles.AllowDecimalPoint, NumberFormatInfo.InvariantInfo);
                else
                    MessageBox.Show(language.CurrentLanguage);
            }

            if (!inputWeight.Text.ToString().Equals("")) {
                    checkNumberFormat = numberFormat.Match(inputWeight.Text.ToString());
                        if( checkNumberFormat.Success)
                        converterWeight.InputValue = Double.Parse(inputWeight.Text.Replace(',', '.'), NumberStyles.AllowDecimalPoint, NumberFormatInfo.InvariantInfo);
                        else
                            MessageBox.Show(language.CurrentLanguage);
            }

           if (!inputData.Text.ToString().Equals("")) {
                    checkNumberFormat = numberFormat.Match(inputData.Text.ToString());
                        if( checkNumberFormat.Success)
                        converterData.InputValue = Double.Parse(inputData.Text.Replace(',', '.'), NumberStyles.AllowDecimalPoint, NumberFormatInfo.InvariantInfo);
                        else
                            MessageBox.Show(language.CurrentLanguage);
           }

            //prevedenie hodnot
            converterLength.Convert();
            converterWeight.Convert();
            converterData.Convert();

            //vypisanie hodnot
            converterLength.ShowResults(outputLength);
            converterWeight.ShowResults(outputWeight);
            converterData.ShowResults(outputData);
        }

        #region Selection Events

        //Zmena jazyka
        private void LanguagesBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            language.ChangeLanguage(LanguagesBox.SelectedItem.ToString(), ConvertBTN, languageTB);
        }

        //Length ComboBox
        private void inputLengthBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            switch (inputLengthBox.SelectedValue.ToString())
            {                                                   //tu uz nie :
                                                                //An exception of type 'System.NullReferenceException' occurred in PrevodnikJednotiek.exe but was not handled in user code

                                                                //Additional information: Object reference not set to an instance of an object.
                case "System.Windows.Controls.ComboBoxItem: mm": converterLength.InputUnit = LenghtUnit.MM; break;
                case "System.Windows.Controls.ComboBoxItem: cm": converterLength.InputUnit = LenghtUnit.CM; break;
                case "System.Windows.Controls.ComboBoxItem: m": converterLength.InputUnit = LenghtUnit.M; break;
                case "System.Windows.Controls.ComboBoxItem: km": converterLength.InputUnit = LenghtUnit.KM; break;
            }
        }

        #endregion

    }
}
Nahoru Odpovědět
11.7.2015 20:11
Svet patrí tím, ktorí sa neposerú.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.