我正在做一个存储电影的小项目。我正在使用三个窗口窗体、一个介绍窗体、一个主窗体和一个新电影窗体。我还有一个名为 MovieManager 的类,它是应用程序的核心。我的问题是我不确定我应该如何处理这个窗口。
假设我希望应用程序从介绍表单开始,当用户单击“确定”按钮时,主表单应该会出现。做这个的最好方式是什么?我应该在 Program.cs 中创建一个显示和隐藏不同窗口窗体的 MovieManager 类的对象,还是应该在 Program.cs 中从显示介绍窗体开始?
您可以在开始应用程序时简单地在 Program.cs 中执行所有人员。将您的 IntroForm 显示为对话框。如果用户单击确定,则启动主应用程序表单,否则关闭应用程序。
static void Main()
{
IntroForm introForm = new IntroForm();
if (introForm.ShowDialog() != DialogResult.OK)
{
Application.Exit();
return;
}
Application.Run(new MainForm());
}
如果您需要MovieManager
所有这些表单的单个实例,那么您可以在 Main 方法中创建它并将相同的实例传递给IntroForm
and MainForm
:
MovieManager movieManager = new MovieManager();
IntroForm introForm = new IntroForm(movieManager);
if (introForm.ShowDialog() != DialogResult.OK)
{
Application.Exit();
return;
}
Application.Run(new MainForm(movieManager));
您也可以实现MovieManager
为Singleton,它可以通过静态属性在任何地方访问MovieManager.Instance
。
你所说的介绍形式,我应该称之为启动画面。在 program.cs 中,我应该只弹出初始屏幕(带有徽标、标题和有关应用程序的信息、版本号等)。初始屏幕显示一段时间(为此使用计时器,或者 Thread.Sleep 也可能有点重)。
当启动屏幕关闭显示 MainForm 时,您可以从那里实例化 MovieManager 或使用静态 MovieManager(这取决于它的用途)。然后,您可以从主窗体实例化并显示新的电影窗体。
我们使用这样的一段代码:
static void Main(string[] args)
{
try
{
SplashScreen.ShowSplashScreen();
Application.DoEvents();
SplashScreen.WaitForVisibility(.5);
bool starting = true;
while (starting)
{
try
{
SplashScreen.SetStatus("Initialize mainform...");
starting = false;
Application.Run(new MainForm());
}
catch (Exception ex)
{
if (starting)
starting = XtraMessageBox.Show(ex.Message, "Fout bij initialiseren", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1) == DialogResult.Retry;
else
throw (ex);
}
}
}
catch (Exception ex)
{
if (ex is object)
XtraMessageBox.Show(ex.Message, "Algemene fout", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
}
}
启动画面(摘录)中的代码如下所示:
if (_splashForm == null)
{
ThreadPool.QueueUserWorkItem(RunSplashForm, null);
while (_splashForm == null || _splashForm.IsHandleCreated == false)
{
System.Threading.Thread.Sleep(50);
}
}
也许这些链接也会为您提供一些有用的信息:
http://www.reflectionit.nl/Articles/Splash.aspx
我们以此作为我们自己代码的基础:
http://www.codeproject.com/Articles/5454/A-Pretty-Good-Splash-Screen-in-C
有不同的方式来展示一个新的表格。您可以首先使用 MdiWinForm 您必须将 IsMdiContainer 属性更改为 true 然后在 MainForm 中使用这些代码:
Form2 f2;
private void button1_Click(object sender, EventArgs e)
{
if (f2 == null) {
f2 = new Form2();
f2.MdiParent = this;
f2.FormClosed += delegate { f2 = null; };
f2.Show();
}
else {
f2.Activate();
}
}