我试图交换"场景",相当于游戏中的等级。我已经知道Forms不适合游戏,但我所做的并不是游戏,因为它是由一些对话框选项和动画.gifs构建的交互式电影。
我计划建立每个"场景"在单独的用户控件中,然后使用处理所有场景的单独脚本将这些用户控件加载到主窗体上。在这个单独的脚本中,我将添加" ChangeScene"方法,所以我基本上可以触发场景一旦完成就改变,并在一个脚本中进行所有场景更改。到目前为止,我遇到了两个问题。
1:我似乎无法通过此Scene Handler脚本调用任何内容。我一直在尝试使用" Form1.SuspendLayout"和" Form1.ResumeLayout"顺畅地在场景之间切换,但我似乎无法调用它,然后当我尝试在场景结束时将场景中的布尔值设置为true时,我无法从场景中检查该布尔值处理程序脚本。如何让这个脚本使用每个场景中的bool?
2:我可以拨打" Form1.SuspendLayout"此Scene Handler脚本中的方法?到目前为止,我被告知我需要引用System.Windows.Forms.Control.SuspendLayout()'虽然我不知道如何引用它。它不是命名空间或程序集,所以我该如何引用它?
很抱歉,这个问题似乎是一个简单的错误。我是Windows Forms的新手,对C#没有太多经验,所以我对这个使用过的术语的任何疑问都太复杂了,我无法理解。
场景处理程序:class SceneHandler :
{
public virtual UserControl changeScene(UserControl currentScene, UserControl newScene)
{
Form1.SuspendLayout();
currentScene.Visible = false;
currentScene.Dock = DockStyle.None;
newScene.Visible = true;
newScene.Dock = DockStyle.Fill;
return newScene; //use "this.SuspendLayout" and "ResumeLayout"
}
}
答案 0 :(得分:0)
忘记SuspendLayout
。
预先加载所有的UC但隐藏。
在遇到问题之前不要担心性能!
将所有涉及多个UC的方法放在表单中作为公共方法。
在每个UC中对您的mainform进行公开引用,并在加载UC后立即设置。
现在每个控件都可以调用mainform.someMethod()
。
随时寻求更多建议和帮助!