尝试从另一种形式调用函数,但无法正常工作

时间:2018-09-16 12:02:29

标签: c# conways-game-of-life

所以我对编程特别是C#还很陌生,所以希望您能为我提供帮助。我有两个WPF表单,当我在其中一个中按下按钮时,我想在画布上绘制一个网格。因此,当我单击该按钮时,它将调用正确的函数和所有内容,但网格不会显示。我试图查找有类似问题的人,但无法找出问题所在。这是我的一些代码:

namespace GameOfLife
{
  public partial class SetupPopUp : Window
  {
    public SetupPopUp()
    {
      InitializeComponent();
    }

    private void OkButton_Click(object sender, RoutedEventArgs e)
    {
      int cols;
      int rows;

      int.TryParse(tb_numCol.Text, out cols);
      int.TryParse(tb_numRows.Text, out rows);
      this.Close();
      MainWindow.Instance.DrawGrid(rows,cols);
    }
  }
}

和:

namespace GameOfLife
{
  public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();
    }

    private static MainWindow _instance;

    public static MainWindow Instance
    {
      get
      {
        return _instance = _instance ?? new MainWindow();
      }
    }

    public void DrawGrid(int rows, int cols)
    {
      for (int i = 0; i < rows; i++)
      {
        for (int j = 0; j < cols; j++)
        {
          Rectangle r = new Rectangle();                  // Erstellt die Rechtecke und fügt Sie dem Canvas hinzu
          r.Width =  MainCanvas.Width / rows;
          r.Height = MainCanvas.Height / cols;
          r.Fill = Brushes.WhiteSmoke;
          r.Stroke = Brushes.Black;
          r.StrokeThickness = 0.5;
          MainCanvas.Children.Add(r);

          Canvas.SetLeft(r, j * r.Width);                 //Reit die Rechtecke aneinander
          Canvas.SetTop(r, i * r.Height);

          r.MouseDown += R_MouseDown;
        }
      }
    }

2 个答案:

答案 0 :(得分:1)

除了@mrid提到的内容外,您的单例实现可能无法正常运行。也许请参考here,了解如何使MainWindow单身。

编辑:

正如@Tantem在评论中提到的,也可以通过调用轻松避免单例问题:

((MainWindow)Application.Current.MainWindow).DrawGrid(rows,cols);

答案 1 :(得分:0)

您的this.Close()将在调用MainWindow.Instance.DrawGrid(rows,cols)之前关闭您的SetupPopUp表单