繁体   English   中英

我的第一个项目使用 C# 和 WPF - 如何设置变量 from.xaml.cs 出现在文本框中?

[英]My first project using C# & WPF - how to set a variable from .xaml.cs to appear in the textbox?

我正在尝试使用 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)有更好的方法,我想听听一些想法。

谢谢!

有几种方法可以做到这一点,例如数据绑定。 但我想学习,因为这是你在 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;
}

编辑以回答您的最后一个问题:为此,还有很多方法可以使它变得更好或更容易。 如果需要,可以对命令、命令参数和命令绑定进行一些研究。 但是对于这个简单的 Demo 案例,您可以简单地对所有数字按钮使用相同的事件处理程序:

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

sender参数包含触发事件处理程序的 UI object,因此您将获得对被单击按钮的引用。 并且由于每个按钮的Content属性已经包含您要添加到字符串中的数字,您可以从那里获取它并将 append 获取到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"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM