在wpf c#中访问.cs文件之间的变量

时间:2016-03-09 16:37:59

标签: c# wpf xaml

这是wpf应用程序数学训练,它考虑在数学表达式解决方案上花费的时间。我有两个.cs文件Window4_2和Window2。 Window2中存在一个名为public int errors的计数器变量,它计算用户有多少错误。当我在Window4_2中调用并显示它时,它不显示在那里。这是代码:

Window2.xaml.cs代码:

public partial class Window2 : Window
{
    static string storageVariable;
    static int total = 0;
    static int counter = 0;
    public int errors = 0;


    public Window2()
    {
        InitializeComponent();
        random1();
    }

    public void random1()
    {
        Random rand = new Random();
        int num1 = rand.Next(10);
        int num2 = rand.Next(10);
        Display.Text = Convert.ToString(num1) + "*" + Convert.ToString(num2);
        total = num1 * num2;
    }

    private void btn_one_Click(object sender, RoutedEventArgs e)
    {   
        main_display.Text += "1";
        storageVariable += "1";
    }

    private void btn_two_Click(object sender, RoutedEventArgs e)
    {   
        main_display.Text += "2";
        storageVariable += "2";
    }

    private void btn_three_Click(object sender, RoutedEventArgs e)
    {   
        main_display.Text += "3";
        storageVariable += "3";
    }

    private void btn_four_Click(object sender, RoutedEventArgs e)
    {   
        main_display.Text += "4";
        storageVariable += "4";
    }

    private void btn_five_Click(object sender, RoutedEventArgs e)
    {   
        main_display.Text += "5";
        storageVariable += "5";
    }

    private void btn_six_Click(object sender, RoutedEventArgs e)
    {   
        main_display.Text += "6";
        storageVariable += "6";
    }

    private void btn_seven_Click(object sender, RoutedEventArgs e)
    {   
        main_display.Text += "7";
        storageVariable += "7";
    }

    private void btn_eight_Click(object sender, RoutedEventArgs e)
    {   
        main_display.Text += "8";
        storageVariable += "8";
    }

    private void btn_nine_Click(object sender, RoutedEventArgs e)
    {   
        main_display.Text += "9";
        storageVariable += "9";
    }

    private void btn_zero_Click(object sender, RoutedEventArgs e)
    {
        main_display.Text += "0";
        storageVariable += "0";
    }

    private void btn_clear_Click(object sender, RoutedEventArgs e)
    {
        main_display.Text = "";
        storageVariable = null;
    }

    private void maindisplay_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter)
        {
            btn_equal_Click(sender, e);
        }
    }

    public void btn_equal_Click(object sender, RoutedEventArgs e)
    {
        if (Convert.ToInt32(storageVariable) == total)
        {
            counter++;
            main_display.Text = "";
            total = 0;
            storageVariable = null;
            random1();
            if (counter == 2)
            {
                main_display.Text = "";
                total = 0;
                storageVariable = null;
                counter = 0;

                var ob = new Window4_2();
                ob.StopTimer();

                var win4_2 = new Window4_2();
                win4_2.Show();
                this.Close();
            }

        }
        if (Convert.ToInt32(storageVariable) != total)
        {
            errors++;
            main_display.Text = "";
            storageVariable = null;

        }

    }
}

Window4_2.xaml.cs代码:

public partial class Window4_2 : Window
{
    Stopwatch sw = new Stopwatch();
    DispatcherTimer dt = new DispatcherTimer();
    string currentTime = string.Empty;


    public Window4_2()
    {
        InitializeComponent();
        dt.Tick += new EventHandler(dt_Tick);
        dt.Interval = new TimeSpan(0, 0, 0, 0, 1);
        ShowErrors();
    }

    private void dt_Tick(object sender, EventArgs e)
    {
            TimeSpan ts = sw.Elapsed;
            currentTime = String.Format("{0:00}:{1:00}:{2:00}",
            ts.Minutes, ts.Seconds, ts.Milliseconds / 10);
            Timer.Text = currentTime;

    }

    public void StartTimer()
    {
        sw.Start();
        dt.Start();
    }

    public void StopTimer()
    {
        if (sw.IsRunning)
            sw.Stop();
    }

    public void ShowErrors()
    {
        Window2 ob = new Window2();
        if (ob.errors != 0)
        {

            Errors_attempt.Text = Convert.ToString(ob.errors);
            penalty_attempt.Text = Convert.ToString(ob.errors) + "x 5 seconds";
        }
        else
        {
            Errors_attempt.Text = "None";
            penalty_attempt.Text = "None";
        }

    }

    private void btn_Home_Click(object sender, RoutedEventArgs e)
    {
        var main_win = new MainWindow();
        main_win.Show();
        this.Close();
    }

我应该如何连接并显示它?

1 个答案:

答案 0 :(得分:0)

一个窗口必须知道另一个窗口。试试这样:

Window1
{
  //Create your Window2 object here with Window2 MyWindow2 = new Window2(this)
  public int error;
}

Window2
{
  private Window1 MyCreatorWindow1;
  public Window2(Window1 CreatorWindow)
  {
    this.MyCreatorWindow1 = CreatorWindow;
  }
  //Now you can get your error with: MyCreatorWindow1.error
}