从另一个类调用公共方法并没有响应

时间:2016-07-29 01:23:26

标签: c# .net

我用C#制作游戏库。

我有一个主窗体,它有一个FlowLayoutPanel,它托管游戏库。有一个"添加游戏" main Form中的方法,它将一个项添加到FlowLayoutPanel,但是这个方法是从第二个表单调用的。但是,当我从第二种形式调用此方法时,根本没有任何事情发生,但如果从主窗体中调用它,它就可以工作。

以下是代码:

这里是mainForm中的添加游戏方法:

    public void addIso()
    {
        PictureBox gameBox = new PictureBox();
        gameBox.ImageLocation = "link here";
        gameBox.Height = 200;
        gameBox.Width = 150;
        gameBox.SizeMode = PictureBoxSizeMode.StretchImage;
        isoPanel.Controls.Add(gameBox);
    }

此方法向FlowLayoutPanel添加一个名为isoPanel的占位符游戏。从同一表格调用时工作。

以下是从第二种形式调用该方法的方法:

    private void addGameButton_Click(object sender, EventArgs e)
    {
        MainWindow mainForm = new MainWindow();
        mainForm.addIso();
    }

当我尝试在方法中添加简单的消息框时,消息框确实显示,但游戏没有添加到FlowLayoutPanel。

任何提示或解决方案?

我为我糟糕的英语和凌乱的编程术语道歉,我不久前开始学习C#。

2 个答案:

答案 0 :(得分:0)

当您加载第二个表单时,您似乎正在重新创建表单。 因为这确实缺乏一点背景。

我建议你有一个主踏板,它将运行两种形式

创建一个游戏管理器类Ex:GameManager.cs

在类中为两个表单创建一个变量并将它们设置为protected。

在每个表格中发送游戏管理员的参考资料。

允许每个窗口通过管理器相互通信,提供安全的内部通信。

如果你想要一些消息来源,请告诉我。

Schematic -mspaint

答案 1 :(得分:0)

  

您可以使用var headers = new Headers(); headers.append('Content-Type', 'application/json'); this.http.post('http://www.syntaxsuccess.com/poc-post/', JSON.stringify({firstName:'Joe',lastName:'Smith'}), {headers:headers}) .map((res: Response) => res.json()) .subscribe((res:Person) => this.postResponse = res); delegate来实现此目的。

你在这里做错了什么:

Delegate点击事件,您正在创建mainForm的新实例。这不是您当前看到的实际主要表单,它是mainForm的不同实例。您的代码将控件添加到布局中,只需通过调用addGameButton来确认这一点,这将打开一个带控件的新表单。

你能做什么:

在这种情况下,您想要修改父控件,在父类中调用方法,您需要通过以下方式使用委托:

需要在Parent类中应用更改,即。mainForm.Show()

  1. 定义委托和该委托类型的事件。

    MainWindow
  2. 为Event分配所需的方法(最好在构造函数中使用它):

    public delegate void UpdateUiDelegate();
    public event UpdateUiDelegate UpdateUiEvent; 
    
  3. 接下来的工作是儿童形式,即。public MainWindow () { UpdateUiEvent+= new UpdateUiDelegate(addIso); } (使用更好的名称,让它成为Form2)。在那里创建一个代表:

    ImageChildControl
  4. 回到MainWindow,在创建子表单实例后找到你调用Second表单的地方,将创建的事件分配给实例的Delegate,为此使用以下代码:

    public Delegate ControlCreator;
    
  5. 还有一项儿童形式的工作要做;从Button click事件中调用委托。即。,

    ImageChildControl ImageChildControlInstance = new  ImageChildControl();
    ImageChildControlInstance.ControlCreator = UpdateUiEvent; 
    

    现在您可以看到您的代码按预期工作。