Мой первый проект с использованием C# и WPF - как установить переменную из .xaml.cs для отображения в текстовом поле? - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь создать калькулятор с C# и WPF.

Цель состоит в том, чтобы изучать и тестировать новые вещи.

Вот код:

XAML

<Window x:Class="calculator.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:calculator"
        mc:Ignorable="d"
        Title="MainWindow" Height="400" Width="400">
    <Grid>
        <Button Content="9" HorizontalAlignment="Left" Margin="295,224,0,0" VerticalAlignment="Top" Width="63" FontFamily="Arial" Click="Button_Click9"/>
        <Button Content="8" HorizontalAlignment="Left" Margin="166,224,0,0" VerticalAlignment="Top" Width="63" FontFamily="Arial" Click="Button_Click8"/>
        <Button Content="7" HorizontalAlignment="Left" Margin="37,224,0,0" VerticalAlignment="Top" Width="63" FontFamily="Arial" Click="Button_Click7"/>
        <Button Content="6" HorizontalAlignment="Left" Margin="295,254,0,0" VerticalAlignment="Top" Width="63" FontFamily="Arial" Click="Button_Click6"/>
        <Button Content="5" HorizontalAlignment="Left" Margin="166,254,0,0" VerticalAlignment="Top" Width="63" FontFamily="Arial" Click="Button_Click5"/>
        <Button Content="4" HorizontalAlignment="Left" Margin="37,254,0,0" VerticalAlignment="Top" Width="63" FontFamily="Arial" Click="Button_Click4"/>
        <Button Content="3" HorizontalAlignment="Left" Margin="295,285,0,0" VerticalAlignment="Top" Width="63" FontFamily="Arial" Click="Button_Click3"/>
        <Button Content="2" HorizontalAlignment="Left" Margin="166,285,0,0" VerticalAlignment="Top" Width="63" FontFamily="Arial" Click="Button_Click2"/>
        <Button Content="1" HorizontalAlignment="Left" Margin="37,285,0,0" VerticalAlignment="Top" Width="63" FontFamily="Arial" Click="Button_Click1"/>
        <Button Content="0" HorizontalAlignment="Left" Margin="37,316,0,0" VerticalAlignment="Top" Width="321" FontFamily="Arial" Click="Button_Click0"/>
        <TextBox HorizontalAlignment="Left" Height="35" Margin="37,49,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="321" FontFamily="Arial" FontSize="20" TextAlignment="Right"/>
        <Button Content="Calculate!" HorizontalAlignment="Left" Margin="154,10,0,0" VerticalAlignment="Top" Width="75"/>
        <Button Content="+" HorizontalAlignment="Left" Margin="37,125,0,0" VerticalAlignment="Top" Width="68" Height="57" Click="Button_Click_Add"/>
        <Button Content="/" HorizontalAlignment="Left" Margin="290,125,0,0" VerticalAlignment="Top" Width="68" Height="57" Click="Button_Click_Multiply"/>
        <Button Content="*" HorizontalAlignment="Left" Margin="206,125,0,0" VerticalAlignment="Top" Width="69" Height="57" Click="Button_Click_Divide"/>
        <Button Content="-" HorizontalAlignment="Left" Margin="122,125,0,0" VerticalAlignment="Top" Width="68" Height="57" Click="Button_Click_Subtract"/>

    </Grid>
</Window>

XAML.CS

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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;

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

        List<int> lista = new List<int>();
        string number = "";
        int res = 0;

        private void Button_Click_Add(object sender, RoutedEventArgs e)
        {
            int numberCreated;
            try
            {
                numberCreated = Int32.Parse(number);
                lista.Add(numberCreated);
            }
            catch (Exception)
            {
                MessageBox.Show("Number could not be added!");
            }
            number = "";
            if(lista.Count != 0)
            {
                foreach(var element in lista)
                {
                    res += element;
                }
                lista.Clear();
            }
            MessageBox.Show(res.ToString());
        }

        private void Button_Click_Subtract(object sender, RoutedEventArgs e)
        {
            try
            {
                int numberCreated = Int32.Parse(number);
                lista.Add(numberCreated);
            }
            catch(Exception)
            {
                MessageBox.Show("Number could not be added!");
            }
            number = "";
            if (lista.Count != 0)
            {
                foreach (var element in lista)
                {
                    res -= element;
                }
                lista.Clear();
            }
            MessageBox.Show(res.ToString());
        }

        private void Button_Click_Multiply(object sender, RoutedEventArgs e)
        {
            try
            {
                int numberCreated = Int32.Parse(number);
                lista.Add(numberCreated);
            }
            catch (Exception)
            {
                MessageBox.Show("Number could not be added!");
            }
            number = "";
            if (lista.Count != 0)
            {
                foreach (var element in lista)
                {
                    res *= element;
                }
                lista.Clear();
            }
            MessageBox.Show(res.ToString());
        }

        private void Button_Click_Divide(object sender, RoutedEventArgs e)
        {
            try
            {
                int numberCreated = Int32.Parse(number);
                lista.Add(numberCreated);
            }
            catch (Exception)
            {
                MessageBox.Show("Number could not be added");
            }
            number = "";
            if (lista.Count != 0)
            {
                foreach (var element in lista)
                {
                    res /= element;
                }
                lista.Clear();
            }
            MessageBox.Show(res.ToString());
        }

        private void Button_Click9(object sender, RoutedEventArgs e)
        {
            number += "9";
        }

        private void Button_Click8(object sender, RoutedEventArgs e)
        {
            number += "8";
        }

        private void Button_Click7(object sender, RoutedEventArgs e)
        {
            number += "7";
        }

        private void Button_Click6(object sender, RoutedEventArgs e)
        {
            number += "6";
        }

        private void Button_Click5(object sender, RoutedEventArgs e)
        {
            number += "5";
        }

        private void Button_Click4(object sender, RoutedEventArgs e)
        {
            number += "4";
        }

        private void Button_Click3(object sender, RoutedEventArgs e)
        {
            number += "3";
        }

        private void Button_Click2(object sender, RoutedEventArgs e)
        {
            number += "2";
        }

        private void Button_Click1(object sender, RoutedEventArgs e)
        {
            number += "1";
        }

        private void Button_Click0(object sender, RoutedEventArgs e)
        {
            number += "0";
        }
    }
}

Я открыт для любых советов и идей, которые вы могли бы дать абсолютному новичку.

Причина, по которой я публикация этого сообщения связана с тем, что я не знаю, как сделать так, чтобы переменная "res" появлялась в TextBox после каждой операции.

Я видел в Интернете, что многие люди говорили о TextBox.text, но я не знаю, как используйте его.

Возможно, мне придется использовать его в .xaml.cs, но как я могу определить TextBox? Как моя программа узнает, к какому TextBox я хочу применить текст?

Кроме того, мне кажется, что есть лучший подход - создать число с помощью кнопок, а не создавать 10 отдельных функций (от button_click0 до button_click9) и я хотел бы услышать несколько идей.

Спасибо!

1 Ответ

4 голосов
/ 13 июля 2020

Есть несколько способов сделать это, например, привязка данных. Но я полагаю, что для обучения, поскольку это ваш самый первый шаг в WPF, вам следует начать более легко.

Чтобы получить доступ к элементу управления через код, вы должны дать ему имя в XAML:

<TextBox x:Name="TxtResult" HorizontalAlignment="Left" Height="35" Margin="37,49,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="321" FontFamily="Arial" FontSize="20" TextAlignment="Right"/>

Таким образом, вы можете получить доступ к своему текстовому полю в коде:

private void Button_Click9(object sender, RoutedEventArgs e)
{
    number += "9";
    this.TxtResult.Text = number;
}

EDIT, чтобы ответить на ваш последний вопрос: Также для этого есть много способов, как сделать его лучше или проще. Если хотите, можете изучить команды, параметры команд и привязки команд. Но для этого простого демонстрационного случая вы можете просто использовать один и тот же обработчик событий для всех цифровых кнопок:

private void ButtonNumberClick(object sender, RoutedEventArgs e)
{
    number += ((Button) sender).Content;
    this.TxtResult.Text = number;
}

Параметр sender содержит объект пользовательского интерфейса, который запустил обработчик события, поэтому вы получите ссылка на кнопку, которая была нажата. А поскольку свойство Content каждой кнопки уже содержит число, которое вы хотите добавить к своей строке, вы можете взять его оттуда и добавить в строку number.

Теперь в XAML у вас есть чтобы назначить этот обработчик событий всем десяти кнопкам:

    <Button Content="9" HorizontalAlignment="Left" Margin="295,224,0,0" VerticalAlignment="Top" Width="63" FontFamily="Arial" Click="ButtonNumberClick"/>
    <Button Content="8" HorizontalAlignment="Left" Margin="166,224,0,0" VerticalAlignment="Top" Width="63" FontFamily="Arial" Click="ButtonNumberClick"/>
    <Button Content="7" HorizontalAlignment="Left" Margin="37,224,0,0" VerticalAlignment="Top" Width="63" FontFamily="Arial" Click="ButtonNumberClick"/>
    <Button Content="6" HorizontalAlignment="Left" Margin="295,254,0,0" VerticalAlignment="Top" Width="63" FontFamily="Arial" Click="ButtonNumberClick"/>
    <Button Content="5" HorizontalAlignment="Left" Margin="166,254,0,0" VerticalAlignment="Top" Width="63" FontFamily="Arial" Click="ButtonNumberClick"/>
    <Button Content="4" HorizontalAlignment="Left" Margin="37,254,0,0" VerticalAlignment="Top" Width="63" FontFamily="Arial" Click="ButtonNumberClick"/>
    <Button Content="3" HorizontalAlignment="Left" Margin="295,285,0,0" VerticalAlignment="Top" Width="63" FontFamily="Arial" Click="ButtonNumberClick"/>
    <Button Content="2" HorizontalAlignment="Left" Margin="166,285,0,0" VerticalAlignment="Top" Width="63" FontFamily="Arial" Click="ButtonNumberClick"/>
    <Button Content="1" HorizontalAlignment="Left" Margin="37,285,0,0" VerticalAlignment="Top" Width="63" FontFamily="Arial" Click="ButtonNumberClick"/>
    <Button Content="0" HorizontalAlignment="Left" Margin="37,316,0,0" VerticalAlignment="Top" Width="321" FontFamily="Arial" Click="ButtonNumberClick"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...