Hallo,
ich möchte selber mit Xamarin und C# einen Taschenrechner programmieren.
Mein Problem ist folgendes:
Ich habe auf einer Seite verschiedene Buttons (siehe Bild) und möchte, wenn man auf einen Button klickt, dass in dem ersten oder zweiten Label die Ziffer erscheint.
In meiner Version erscheint immer eine 0 vor der Zahl.
Wäre toll wenn ihr mir da helfen könntet.
Danke und Grüße Maxi
Mein XAML-Code:
<Grid Margin="30" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
<Grid.RowDefinitions>
<RowDefinition Height="50"></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="50"></RowDefinition>
<RowDefinition Height="50"></RowDefinition>
<RowDefinition Height="50"></RowDefinition>
<RowDefinition Height="50"></RowDefinition>
<RowDefinition Height="50"></RowDefinition>
<RowDefinition Height="50"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"></ColumnDefinition>
<ColumnDefinition Width="50"></ColumnDefinition>
<ColumnDefinition Width="50"></ColumnDefinition>
<ColumnDefinition Width="50"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Text="0" x:Name="Cmd_0" Clicked="Cmd_1_Click"
HorizontalOptions="Center" BackgroundColor="DarkGray" TextColor="White"
VerticalOptions="CenterAndExpand" Grid.Row="9" Grid.Column="1" />
<Button Text="," x:Name="Cmd_Komma"
HorizontalOptions="Center" BackgroundColor="Orange"
VerticalOptions="CenterAndExpand" Grid.Row="9" Grid.Column="2" />
<Button Text="7" x:Name="Cmd_7"
HorizontalOptions="Center" BackgroundColor="DarkGray" TextColor="White"
VerticalOptions="CenterAndExpand" Grid.Row="8" Grid.Column="0" />
<Button Text="8" x:Name="Cmd_8"
HorizontalOptions="Center" BackgroundColor="DarkGray" TextColor="White"
VerticalOptions="CenterAndExpand" Grid.Row="8" Grid.Column="1" />
<Button Text="9" x:Name="Cmd_9"
HorizontalOptions="Center" BackgroundColor="DarkGray" TextColor="White"
VerticalOptions="CenterAndExpand" Grid.Row="8" Grid.Column="2" />
<Button Text="4" x:Name="Cmd_4"
HorizontalOptions="Center" BackgroundColor="DarkGray" TextColor="White"
VerticalOptions="CenterAndExpand" Grid.Row="7" Grid.Column="0" />
<Button Text="5" x:Name="Cmd_5"
HorizontalOptions="Center" BackgroundColor="DarkGray" TextColor="White"
VerticalOptions="CenterAndExpand" Grid.Row="7" Grid.Column="1" />
<Button Text="6" x:Name="Cmd_6"
HorizontalOptions="Center" BackgroundColor="DarkGray" TextColor="White"
VerticalOptions="CenterAndExpand" Grid.Row="7" Grid.Column="2" />
<Button Text="1" x:Name="Cmd_1" Clicked="Cmd_1_Click"
HorizontalOptions="Center" BackgroundColor="DarkGray" TextColor="White"
VerticalOptions="CenterAndExpand" Grid.Row="6" Grid.Column="0" />
<Button Text="2" x:Name="Cmd_2"
HorizontalOptions="Center" BackgroundColor="DarkGray" TextColor="White"
VerticalOptions="CenterAndExpand" Grid.Row="6" Grid.Column="1" />
<Button Text="3" x:Name="Cmd_3"
HorizontalOptions="Center" BackgroundColor="DarkGray" TextColor="White"
VerticalOptions="CenterAndExpand" Grid.Row="6" Grid.Column="2" />
<Button Text="=" x:Name="Cmd_Istgleich"
HorizontalOptions="Center" BackgroundColor="Orange" TextColor="Black"
VerticalOptions="CenterAndExpand" Grid.Row="9" Grid.Column="3" />
<Button Text="÷" x:Name="Cmd_Durch"
HorizontalOptions="Center" BackgroundColor="Orange" TextColor="Black"
VerticalOptions="CenterAndExpand" Grid.Row="8" Grid.Column="3" />
<Button Text="×" x:Name="Cmd_Mal"
HorizontalOptions="Center" BackgroundColor="Orange" TextColor="Black"
VerticalOptions="CenterAndExpand" Grid.Row="7" Grid.Column="3" />
<Button Text="-" x:Name="Cmd_Minus"
HorizontalOptions="Center" BackgroundColor="Orange" TextColor="Black"
VerticalOptions="CenterAndExpand" Grid.Row="6" Grid.Column="3" />
<Button Text="+" x:Name="Cmd_Plus"
HorizontalOptions="Center" BackgroundColor="Orange" TextColor="Black"
VerticalOptions="CenterAndExpand" Grid.Row="5" Grid.Column="3" />
<Button Text="?" x:Name="Cmd_Pi"
HorizontalOptions="Center" BackgroundColor="Orange" TextColor="Black"
VerticalOptions="CenterAndExpand" Grid.Row="5" Grid.Column="2" />
<Button Text="C" x:Name="Cmd_Clean"
HorizontalOptions="Center" BackgroundColor="Orange" TextColor="Black"
VerticalOptions="CenterAndExpand" Grid.Row="5" Grid.Column="1" />
<Label Text="" x:Name="lbl_gleich"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" Grid.Row="4" Grid.Column="0"/>
<Label Text="" x:Name="lbl_rechenoperator_2"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" Grid.Row="3" Grid.Column="0"/>
<Label Text="" x:Name="lbl_rechenzeichen"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" Grid.Row="2" Grid.Column="0"/>
<Label x:Name="Lbl_rechenoperator_1"
HorizontalOptions="Center" VerticalOptions="CenterAndExpand" TextColor="Black"
Grid.Row="2" Grid.Column="0"/>
</Grid>
Und hier mein C#-Code:
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
lbl_gleich.Text = "";
lbl_rechenzeichen.Text = "";
Cmd_0.Clicked += Cmd_0_Click;
Cmd_1.Clicked += Cmd_1_Click;
}
private void Cmd_0_Click(object sender, EventArgs args)
{
if(lbl_rechenzeichen.Text == "")
{
Lbl_rechenoperator_1.Text = Lbl_rechenoperator_1.Text + "0";
}
else
{
lbl_rechenoperator_2.Text = lbl_rechenoperator_2.Text + "0";
}
}
Mal selbst gedebugged, woher das kommen könnte?
[Artikel] Debugger: Wie verwende ich den von Visual Studio?
Ansonsten der gerenelle Hinweis, dass man auch bei Xamarin und XAML den MVVM Pattern verwenden sollte.
Xamarin (mit XAML) und WPF sind darauf ausgelegt.
[Artikel] MVVM und DataBinding
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Na, ob du das alleine rausfindest, da bin ich mal gespannt...
Hallo,
in Deinem XAML sind alle Buttons ausser der 0 und 1 tot, da kein Click Event definiert ist.
Die beiden Buttons 0 und 1 definieren das gleiche Event, aber die zugehörige Cmd_1_Click Methode hast Du nicht gepostet.
Stattdessen aber Cmd_0_Click, die aber keinem Button zugeordnet ist.
In Deiner Cmd_0_Click Methode wird nicht ersichtlich, welcher Button gedrückt ist und einfach immer nur stur eine weitere 0 im Label angefügt.
Deswegen verwende ich jetzt mal die Methode als Cmd_1_Click für eine mögliche Lösung:
private void Cmd_1_Click(object sender, RoutedEventArgs e)
{
Button button = sender as Button;
if (lbl_rechenzeichen.Content == "")
{
Lbl_rechenoperator_1.Content = $"{Lbl_rechenoperator_1.Content}{button.Content}";
}
else
{
lbl_rechenoperator_2.Content = $"{lbl_rechenoperator_2.Content}{button.Content}";
}
}
Das ist jetzt WPF, da ich von Xamarin keinen Plan habe!
Stattdessen aber Cmd_0_Click, die aber keinem Button zugeordnet ist.
Doch, schau mal in den Konstruktor. 😉