Попытка вызвать функцию из другой формы, но она не будет работать
Так что я довольно новичок в программировании и особенно в 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 ответа
Помимо того, что упомянул @mrid, ваша одноэлементная реализация может работать не совсем правильно. Может быть, обратитесь к здесь о том, как сделать MainWindow
синглтон.
Редактировать:
Как упоминалось в комментариях @Tantem, проблему синглтона можно легко избежать, вызвав:
((MainWindow)Application.Current.MainWindow).DrawGrid(rows,cols);
Ваш this.Close()
закрывает вашу форму SetupPopUp раньше MainWindow.Instance.DrawGrid(rows,cols)
называется