需要一些指导来使用C#制作GUI计算器?

时间:2014-09-11 11:01:33

标签: c# wpf calculator

我是WPF的新人,但熟悉oopgenerics等等。但我正在尝试制作一个计算器,看看

SCREENSHOT

我通过自己的编码得到了我的方法。

但问题是我有点困惑的是如何获得显示在文本框中的值并进行求和?

查看来源:

using System;
using System.Windows;
using System.Text;

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

        public void nine(Object sender, RoutedEventArgs e)
        {
            DispBox.AppendText("9");

        }
    }
}

请帮助指导。

2 个答案:

答案 0 :(得分:2)

解决此问题的正确方法是创建MVVM体系结构并使用绑定。你必须阅读更多关于这一点,因为这是一个很长的话题。

中途快速解决解决方案可能是绑定到表单本身:

<Window x:Name="rootControl" ...

<TextBox Text="{Binding ElementName=rootControl, Path=Display, Mode=TwoWay}" ...

public partial class MainWindow : Window, INotifyPropertyChanged
{
    private string display;

    // Implement INotifyPropertyChanged

    // This should be done by Commands, actually
    public void Nine(Object sender, RoutedEventArgs e)
    {
        Display += "9";
    }

    public string Display
    {
        get
        {
            return display;
        }
        set
        {
            display = value;
            if (NotifyPropertyChanged != null)
                NotifyPropertyChanged(this, new PropertyChangedEventArgs("Display");
        }
    }
}

答案 1 :(得分:-1)

设置名称=&#34; tb&#34;(这就是我命名为文本框的内容)并添加Click =&#34; Button_Click&#34;你的1,2,3,4,....按钮 然后在.cs文件中执行此操作以在文本框中显示单击的数字

private void Button_Click(object sender, RoutedEventArgs e)
    {
        Button b = (Button)sender;
        tb.Text += b.Content.ToString();
    }

 private void Result_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                result();
            }
            catch (Exception exc)
            {
                Console.WriteLine("Receiving", exc.StackTrace);
                tb.Text = "Error!";
            }
        }

private void result()
        {
            String op;
            int iOp = 0;
            if (tb.Text.Contains("+"))
            {
                iOp = tb.Text.IndexOf("+");
            }
            else if (tb.Text.Contains("-"))
            {
                iOp = tb.Text.IndexOf("-");
            }
            else if (tb.Text.Contains("*"))
            {
                iOp = tb.Text.IndexOf("*");
            }
            else if (tb.Text.Contains("/"))
            {
                iOp = tb.Text.IndexOf("/");
            }
            else
            {
                tb.Text = "Error";
            }

            op = tb.Text.Substring(iOp, 1);
            double op1 = Convert.ToDouble(tb.Text.Substring(0, iOp));
            double op2 = Convert.ToDouble(tb.Text.Substring(iOp + 1, tb.Text.Length - iOp - 1));

            if (op == "+")
            {
                tb.Text += "=" + (op1 + op2);
            }
            else if (op == "-")
            {
                tb.Text += "=" + (op1 - op2);
            }
            else if (op == "*")
            {
                tb.Text += "=" + (op1 * op2);
            }
            else
            {
                tb.Text += "=" + (op1 / op2);
            }
        }