试图从另一种形式调用函数,但它不起作用
Trying to call a function from another form, but it won't work
所以我对编程特别是 c# 还很陌生,所以我希望你能帮助我。我有两个 WPF 表单,当我在其中一个表单中按下按钮时,我想在我的 canvas 中绘制一个网格。因此,当我单击按钮时,它会调用正确的函数和所有内容,但网格不会显示。我试图查找有类似问题的人,但无法弄清楚出了什么问题。这是我的一些代码:
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;
}
}
}
您的 this.Close()
正在调用 MainWindow.Instance.DrawGrid(rows,cols)
之前关闭您的 SetupPopUp 表单
除@mrid 提到的之外,您的单例实现可能不太正确。也许参考 here 如何使 MainWindow
成为单例。
编辑:
正如@Tantem在评论中提到的,通过调用也可以轻松避免单例问题:
((MainWindow)Application.Current.MainWindow).DrawGrid(rows,cols);
所以我对编程特别是 c# 还很陌生,所以我希望你能帮助我。我有两个 WPF 表单,当我在其中一个表单中按下按钮时,我想在我的 canvas 中绘制一个网格。因此,当我单击按钮时,它会调用正确的函数和所有内容,但网格不会显示。我试图查找有类似问题的人,但无法弄清楚出了什么问题。这是我的一些代码:
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;
}
}
}
您的 this.Close()
正在调用 MainWindow.Instance.DrawGrid(rows,cols)
之前关闭您的 SetupPopUp 表单
除@mrid 提到的之外,您的单例实现可能不太正确。也许参考 here 如何使 MainWindow
成为单例。
编辑:
正如@Tantem在评论中提到的,通过调用也可以轻松避免单例问题:
((MainWindow)Application.Current.MainWindow).DrawGrid(rows,cols);