Problemen met UWP code voor PWS

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • daanb14
  • Registratie: December 2013
  • Laatst online: 23:10
Mijn vraag
Voor mijn profielwerkstuk moest ik een onderzoek gaan uitvoeren. Met mijn voorliefde voor computers natuurlijk voor het vak informatica gekozen. Ik had de app bijna af, maar ik loop nu tegen een probleem aan. Er zijn geen build errors of wat dan ook. De app geeft geen output in ResultTextBlock, terwijl er geen enkele errors aangegeven worden door Visual Studio. Weet iemand raad?

Relevante software en hardware die ik gebruik
Microsoft Visual Studio 2015 Community
Windows 10 Pro
MSI PE60-2QE-478NL
Intel Core i7-5700HQ
8GB RAM
NVIDIA GTX960M
Windows 10 Mobile Emulator
Windows 10 Software Development Kit versie 14393

Wat ik al gevonden of geprobeerd heb
Ik heb geprobeerd de manier waarop de value geïnterpreteerd wordt door de switch aan te passen, maar zonder resultaat. Verder heb ik de textbox veranderd in een textblock.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
namespace Moneyconverter
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class Home : Page
    {
        double f;
     /// <summary>
     /// Hier wordt de variabele f aangemaakt in het getal double (twee cijfers achter de punt).
     /// </summary>
        public Home()
        {
            this.InitializeComponent();
        }

        public static bool IsSelected { get; internal set; }

        private void ComboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

            var combo = (ComboBox)sender;
            var item = (ComboBoxItem)combo.SelectedItem;
        }
        ///  Hier wordt geregeld dat het variabele van de combobox gebruikt kan worden in de switch.
        private void TextBox1_TextChanged(object sender, TextChangedEventArgs e)
        {
            
            f = double.Parse(TextBox1.Text);
        }
        /// Hier wordt het getal dat ingevoerd wordt in het vak om de valuta in te vullen, omgezet in een getal met twee cijfers achter de komma.
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            
            switch (ComboBox1.SelectedValuePath)
            {
                case "USD":
                    ResultTextBox.Text = Convert.ToString(f * 0.94);
                    break;
                case "AUD":
                    ResultTextBox.Text = Convert.ToString(f * 0.70);
                    break;
                case "GBP":
                    ResultTextBox.Text = Convert.ToString(f * 1.18);
                    break;
                case "JPY":
                    ResultTextBox.Text = Convert.ToString(f * 0.01);
                    break;
                default:
                    ResultTextBox.Text = Convert.ToString(f * 1.00);
                    break;
            }///De switch zoekt eerst de string die uit de combobox komt. Dan wordt aangegeven dat het resultaat in ResultTextBox moet komen te staan.
            ///Daarachter wordt aangegeven dat de som van de twee double getallen keer elkaar omgezet moet worden naar een string. Anders is ie niet leesbeer in de ResultTextBox.
        }


    }
}

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<Page
    x:Class="Moneyconverter.Home"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Moneyconverter"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <StackPanel Orientation="Horizontal">
            <ComboBox Name="ComboBox1"
                      SelectionChanged="ComboBox1_SelectionChanged"
                      VerticalAlignment="Center"
                      Margin="20, 0, 0, 0">
                <ComboBoxItem Content="USD"/>
                <ComboBoxItem Content="EUR" IsSelected="True"/>
                <ComboBoxItem Content="GBP"/>
                <ComboBoxItem Content="JPY"/>
                <ComboBoxItem Content="AUD"/>
            </ComboBox>
            <!--In de combobox kan men uit de verschillende valuta kiezen-->
            <TextBox RelativePanel.RightOf="ComboBox1"  
                     VerticalAlignment="Center"
                     Margin="20, 0, 0, 0"
                     Name="TextBox1"
                     TextChanged="TextBox1_TextChanged"
                     >
            </TextBox>
            <!--In de textbox wordt de waarde die men om wil zetten ingevoerd-->
            <!--Bij de button komt nog een eventhandler-->
            <Button 
                    RelativePanel.RightOf="TextBox1"
                    VerticalAlignment="Center"
                    Margin="20, 0, 0, 0"
                    Content="Convert"
                    Name="ConvertButton"/>
            <!--Wanneer men op de button klikt zal er een uitvoer uitkomen-->
            <TextBox RelativePanel.RightOf="ConvertButton"
                     VerticalAlignment="Center"
                     Margin="20, 0, 0, 0"
                     Name="ResultTextBox"
                     
                     />
            <!--Het resultaat van de conversie zal weergeven worden in de ResultTextBox-->
        </StackPanel>
    </Grid>
</Page>

[ Voor 75% gewijzigd door daanb14 op 06-12-2016 15:53 ]

Beste antwoord (via daanb14 op 08-12-2016 14:37)


  • Rips10
  • Registratie: November 2008
  • Laatst online: 22-06 15:41
Na het schrijven van code komt altijd het testen. Visual Studio (VS) biedt daar gemakkelijke mogelijkheden voor. Om te weten wat er precies gebeurt na het drukken op een knop kun je een break-point toevoegen (rode bolletje links):
Afbeeldingslocatie: http://i68.tinypic.com/oihn4o.jpg
Door vervolgens het programma te starten en op de knop te drukken, zal het programma stoppen bij de break-point die je hebt geplaatst.
Vervolgens kun je met F10 stap voor stap door de code lopen. Hou de pointer op bepaalde code om de waarde te zien:
Afbeeldingslocatie: http://i67.tinypic.com/vqpgd0.png
selectedValuePath heeft geen waarde, dus zal de switch statement altijd langs de default gaan.

Als je er echter zelf niet uitkomt:
spoiler: Oplossing voor dit probleem
var item = (ComboBoxItem)ComboBox1.SelectedItem;
string result = item.Content.ToString();
switch (result)

[ Voor 5% gewijzigd door Rips10 op 06-12-2016 16:59 ]

Alle reacties


Acties:
  • +1 Henk 'm!

  • BM
  • Registratie: September 2001
  • Laatst online: 22:08

BM

Moderator Spielerij
Het is handiger als je je code post in een [code=c#][/code] blok, ipv een plaatje.

Daarbij, volgens mij is SelectedValuePath niet de waarde waarop je je switch wilt laten checken :)

Verder:
- waarom parse je de input bij elke textchange event, en niet pas op het moment dat je 'm nodig hebt?
- Combobox1_SelectionChanged kun je weghalen, dat doet op deze manier helemaal niks :)

En klein algemeen dingetje, commentaar staat meestal boven de code waar deze betrekking op heeft, niet er onder

[ Voor 45% gewijzigd door BM op 05-12-2016 19:51 ]

Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three


Acties:
  • 0 Henk 'm!

  • daanb14
  • Registratie: December 2013
  • Laatst online: 23:10
BM schreef op maandag 5 december 2016 @ 19:49:
Het is handiger als je je code post in een [code=c#][/code] blok, ipv een plaatje.

Daarbij, volgens mij is SelectedValuePath niet de waarde waarop je je switch wilt laten checken :)

Verder:
- waarom parse je de input bij elke textchange event, en niet pas op het moment dat je 'm nodig hebt?
- Combobox1_SelectionChanged kun je weghalen, dat doet op deze manier helemaal niks :)

En klein algemeen dingetje, commentaar staat meestal boven de code waar deze betrekking op heeft, niet er onder
Ik zal er morgen mee aan de slag gaan (school hè ;) ). Ik zal die opmerking over comment ook meenemen. Bedankt voor de tip. Ik ben nog maar een beginner, maar dit lijkt mij alvast een mooi leermoment voor wanneer ik volgend jaar HBO-ICT ga doen. Alvast bedankt! Ik zal het resultaat meteen delen.

Acties:
  • 0 Henk 'm!

  • daanb14
  • Registratie: December 2013
  • Laatst online: 23:10
BM schreef op maandag 5 december 2016 @ 19:49:
Het is handiger als je je code post in een [code=c#][/code] blok, ipv een plaatje.

Daarbij, volgens mij is SelectedValuePath niet de waarde waarop je je switch wilt laten checken :)

Verder:
- waarom parse je de input bij elke textchange event, en niet pas op het moment dat je 'm nodig hebt?
- Combobox1_SelectionChanged kun je weghalen, dat doet op deze manier helemaal niks :)

En klein algemeen dingetje, commentaar staat meestal boven de code waar deze betrekking op heeft, niet er onder
Ik kom er helaas nog steeds niet uit :'(

Acties:
  • +2 Henk 'm!

  • jip_86
  • Registratie: Juli 2004
  • Laatst online: 10-10 11:40
Hey daan, cool dat je gaat programmeren voor je PWS :D
Wat soms kan helpen om uit te sluiten waar een probleem zit is het te vereenvoudigen. Bij jou zou je bijvoorbeeld zonder de switch kunnen testen en alleen iets als ResultTextBox.Text = "Test"; te kunnen instellen. Of alleen de waarde van f in je text te stoppen om te kijken of die wel goed ingesteld word. Door stapsgewijs uit te sluiten kom je dichterbij de oorzaak van het probleem.

Acties:
  • Beste antwoord
  • +2 Henk 'm!

  • Rips10
  • Registratie: November 2008
  • Laatst online: 22-06 15:41
Na het schrijven van code komt altijd het testen. Visual Studio (VS) biedt daar gemakkelijke mogelijkheden voor. Om te weten wat er precies gebeurt na het drukken op een knop kun je een break-point toevoegen (rode bolletje links):
Afbeeldingslocatie: http://i68.tinypic.com/oihn4o.jpg
Door vervolgens het programma te starten en op de knop te drukken, zal het programma stoppen bij de break-point die je hebt geplaatst.
Vervolgens kun je met F10 stap voor stap door de code lopen. Hou de pointer op bepaalde code om de waarde te zien:
Afbeeldingslocatie: http://i67.tinypic.com/vqpgd0.png
selectedValuePath heeft geen waarde, dus zal de switch statement altijd langs de default gaan.

Als je er echter zelf niet uitkomt:
spoiler: Oplossing voor dit probleem
var item = (ComboBoxItem)ComboBox1.SelectedItem;
string result = item.Content.ToString();
switch (result)

[ Voor 5% gewijzigd door Rips10 op 06-12-2016 16:59 ]


Acties:
  • 0 Henk 'm!

  • daanb14
  • Registratie: December 2013
  • Laatst online: 23:10
Ik ben tot het volgende gekomen, maar helaas zonder resultaat.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
namespace Moneyconverter
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class Home : Page
    {
        public Home()
        {
            this.InitializeComponent();
        }

        public static bool IsSelected { get; internal set; }

        /*hier moet de switch hetgeen dat ingevuld is in TextBox1 parsen naar een double en die variabele f noemen.
         * Vervolgens moet de switch hetgeen uitvoeren dat geselecteerd is in de combobox en hetgeen dat ingevoerd is in TextBox1 keer het ingegeven double getal doen.
         * Dit moet starten wanneer men op de knop Convert klikt. Vervolgens moet de uitvoer in ResultTextBlock komen. Die staat naast de knop. */
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            double f = double.Parse(TextBox1.Text);
            var item = (ComboBoxItem)ComboBox1.SelectedItem;
            string result = item.Content.ToString();
            switch (result)
            {
                case "USD":
                    ResultTextBlock.Text = Convert.ToString(f * 0.94);
                    break;
                case "AUD":
                    ResultTextBlock.Text = Convert.ToString(f * 0.70);
                    break;
                case "GBP":
                    ResultTextBlock.Text = Convert.ToString(f * 1.18);
                    break;
                case "JPY":
                    ResultTextBlock.Text = Convert.ToString(f * 0.01);
                    break;
                default:
                    ResultTextBlock.Text = Convert.ToString(f * 1.00);
                    break;
            }
        }


    }
}

In XAML heb ik het commentaar even verduidelijkt.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<Page
    x:Class="Moneyconverter.Home"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Moneyconverter"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <StackPanel Orientation="Horizontal">
            <!--In de combobox kan men uit de verschillende valuta kiezen-->
            <ComboBox Name="ComboBox1"
                      VerticalAlignment="Center"
                      Margin="20, 0, 0, 0">
                <ComboBoxItem Content="USD"/>
                <ComboBoxItem Content="EUR" IsSelected="True"/>
                <ComboBoxItem Content="GBP"/>
                <ComboBoxItem Content="JPY"/>
                <ComboBoxItem Content="AUD"/>
            </ComboBox>
            <!--In de textbox wordt de waarde die men om wil zetten ingevoerd-->
            <TextBox RelativePanel.RightOf="ComboBox1"  
                     VerticalAlignment="Center"
                     Margin="20, 0, 0, 0"
                     Name="TextBox1"
                     >
            </TextBox>
            <!--Wanneer men op de button klikt zal er een uitvoer uitkomen in ResultTextBlock-->
            <Button 
                    RelativePanel.RightOf="TextBox1"
                    VerticalAlignment="Center"
                    Margin="20, 0, 0, 0"
                    Content="Convert"
                    Name="ConvertButton"/>
            <!--Het resultaat van de conversie zal weergeven worden in de ResultTextBlock-->
            <TextBlock RelativePanel.RightOf="ConvertButton"
                     VerticalAlignment="Center"
                     Margin="20, 0, 0, 0"
                     Name="ResultTextBlock"
                     
                     />
    
        </StackPanel>
    </Grid>
</Page>

Acties:
  • +1 Henk 'm!

  • Rips10
  • Registratie: November 2008
  • Laatst online: 22-06 15:41
daanb14 schreef op woensdag 7 december 2016 @ 17:51:
Ik ben tot het volgende gekomen, maar helaas zonder resultaat.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
namespace Moneyconverter
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class Home : Page
    {
        public Home()
        {
            this.InitializeComponent();
        }

        public static bool IsSelected { get; internal set; }

        /*hier moet de switch hetgeen dat ingevuld is in TextBox1 parsen naar een double en die variabele f noemen.
         * Vervolgens moet de switch hetgeen uitvoeren dat geselecteerd is in de combobox en hetgeen dat ingevoerd is in TextBox1 keer het ingegeven double getal doen.
         * Dit moet starten wanneer men op de knop Convert klikt. Vervolgens moet de uitvoer in ResultTextBlock komen. Die staat naast de knop. */
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            double f = double.Parse(TextBox1.Text);
            var item = (ComboBoxItem)ComboBox1.SelectedItem;
            string result = item.Content.ToString();
            switch (result)
            {
                case "USD":
                    ResultTextBlock.Text = Convert.ToString(f * 0.94);
                    break;
                case "AUD":
                    ResultTextBlock.Text = Convert.ToString(f * 0.70);
                    break;
                case "GBP":
                    ResultTextBlock.Text = Convert.ToString(f * 1.18);
                    break;
                case "JPY":
                    ResultTextBlock.Text = Convert.ToString(f * 0.01);
                    break;
                default:
                    ResultTextBlock.Text = Convert.ToString(f * 1.00);
                    break;
            }
        }


    }
}

In XAML heb ik het commentaar even verduidelijkt.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<Page
    x:Class="Moneyconverter.Home"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Moneyconverter"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <StackPanel Orientation="Horizontal">
            <!--In de combobox kan men uit de verschillende valuta kiezen-->
            <ComboBox Name="ComboBox1"
                      VerticalAlignment="Center"
                      Margin="20, 0, 0, 0">
                <ComboBoxItem Content="USD"/>
                <ComboBoxItem Content="EUR" IsSelected="True"/>
                <ComboBoxItem Content="GBP"/>
                <ComboBoxItem Content="JPY"/>
                <ComboBoxItem Content="AUD"/>
            </ComboBox>
            <!--In de textbox wordt de waarde die men om wil zetten ingevoerd-->
            <TextBox RelativePanel.RightOf="ComboBox1"  
                     VerticalAlignment="Center"
                     Margin="20, 0, 0, 0"
                     Name="TextBox1"
                     >
            </TextBox>
            <!--Wanneer men op de button klikt zal er een uitvoer uitkomen in ResultTextBlock-->
            <Button 
                    RelativePanel.RightOf="TextBox1"
                    VerticalAlignment="Center"
                    Margin="20, 0, 0, 0"
                    Content="Convert"
                    Name="ConvertButton"/>
            <!--Het resultaat van de conversie zal weergeven worden in de ResultTextBlock-->
            <TextBlock RelativePanel.RightOf="ConvertButton"
                     VerticalAlignment="Center"
                     Margin="20, 0, 0, 0"
                     Name="ResultTextBlock"
                     
                     />
    
        </StackPanel>
    </Grid>
</Page>
Waarschijnlijk is er door het aanpassen van bepaalde namen ofzo iets mis gegaan. Je event 'Button_click' is niet gekoppeld aan je knop 'ConvertButton'.
Door in je design dubbel op de knop te klikken wordt er een nieuw event aangemaakt. (je springt dan naar de code in een nieuwe methode) Als je daar je code in plakt, werkt het weer. De oude click methode kun je verwijderen.

Acties:
  • 0 Henk 'm!

  • daanb14
  • Registratie: December 2013
  • Laatst online: 23:10
Rips10 schreef op woensdag 7 december 2016 @ 18:35:
[...]


Waarschijnlijk is er door het aanpassen van bepaalde namen ofzo iets mis gegaan. Je event 'Button_click' is niet gekoppeld aan je knop 'ConvertButton'.
Door in je design dubbel op de knop te klikken wordt er een nieuw event aangemaakt. (je springt dan naar de code in een nieuwe methode) Als je daar je code in plakt, werkt het weer. De oude click methode kun je verwijderen.
Kom ik er net achter dat ik de event handler voor de button vergeten ben |:(

Acties:
  • 0 Henk 'm!

  • daanb14
  • Registratie: December 2013
  • Laatst online: 23:10
De eventhandler voor de button is aangemaakt. Nu functioneert de app. Heel erg bedankt iedereen voor jullie input. Fijne community hier op tweakers!
Pagina: 1