【问题标题】:Display Image at project startup - program.cs?在项目启动时显示图像 - program.cs?
【发布时间】:2011-11-25 03:55:12
【问题描述】:

我有一个小型 Windows 窗体项目,现在我希望在项目启动时显示图像,我的意思是 Program.cs

有可能吗?

static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Image MyPrgImage = Image.FromFile("C:\\Temp\\Images\\For_Network.gif");
            ??????

            Application.Run(new Form1());
        }

【问题讨论】:

  • 你的意思是像闪屏?
  • 您正在寻找创建启动画面。看看这个:google.com/…

标签: c# winforms


【解决方案1】:

您需要一个简单的表单,可能带有 PictureBox,来加载和显示图像。然后在加载主表单后将其删除。

【讨论】:

  • 但问题是picturebox显示没问题。但是图片没有与图片框一起显示...
【解决方案2】:

你的意思是启动画面,对吧?
考虑添加对 Microsoft.VisualBasic 的引用(如果尚未完成),然后设置 WindowsFormsApplicationBase.SplashScreen 属性。

还有几点:

  • Windows 窗体不支持简单直接的初始屏幕。
    即使是上面的解决方案也需要几秒钟才能加载 .net 框架以显示启动画面。
  • 有关更多示例和重要说明,请参阅此question here
  • 请参阅此CodeProject.com sample 了解自定义解决方案

【讨论】:

  • @IAbstract 你能解释一下为什么不吗?我同意这看起来很奇怪,但您还添加了对其他 DLL 的引用只是为了使用它们的功能。 VisualBasic.dll 由 MS 维护,是 .net 框架的一个组成部分,所以我认为这没有任何问题。
  • 请参阅@Cipi 的回答......不使用参考。我不一定同意他用于关闭表单的过程,但它并不正确。
  • @IAbstract:我的代码中的表单关闭有什么问题?它是线程安全的,它会关闭表单... :)
  • @IAbstract:想看看你的想法......在这里发表评论,我会将它添加到我的答案中并参考你。 ;)
【解决方案3】:

当然...在您的项目中添加新的WindowsForm,将其命名为SplashImageForm。将PictureBox控件添加到其中,并在其中添加您想要的图像。调整表单大小,设置这些SplashImageForm 属性:

FormBorderStyle - None
ShowInTaskBar - false
StartPosition - CenterScreen

然后您想在 Form1 之前显示该表单并在超时到期后将其关闭...例如:

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    SplashImageForm f = new SplashImageForm();

    f.Shown += new EventHandler((o,e)=>{
        System.Threading.Thread t = new System.Threading.Thread(() =>
            {
                System.Threading.Thread.Sleep(2000);
                f.Invoke(new Action(() => { f.Close(); }));

            });
            t.IsBackground = true;
            t.Start();
    });

    Application.Run(f);
    Application.Run(new Form1());
}

编辑 现在,有一个新线程在System.Threading.Thread.Sleep(2000) 上阻塞2 秒,并且主线程被允许在Application.Run(f) 上阻塞,直到SplashImageForm 没有关闭。所以图像由主线程加载,GUI 是响应式的。

当超时结束时,Invoke() 方法被调用,因此作为表单所有者的主线程将其关闭。如果这里不存在,则会抛出跨线程异常。

现在图像显示 2 秒,然后显示 Form1。

【讨论】:

  • 但问题是picturebox显示没问题。但是图片没有与图片框一起显示...
  • 立即尝试。再次检查代码,我编辑它以添加将被阻塞的新线程,而不是主线程被阻塞的旧代码。
  • @Cipi:我所指的纯粹是个人喜好......例如,我不会将启动画面固定为 2 秒,而是会设置另一个事件,例如 Form1.HandleCreated,它会关闭闪屏。就像我说的那样,无论如何你都没有错(我 +1 你的答案)......结束只是个人喜好。
  • 嘿Cipi,这看起来像是一个很好的例子(+1),但只有在启动屏幕关闭后才会创建Form1。因此,如果 Form1 的创建需要很长时间,那么屏幕上仍然会出现任何内容。关闭 SplashImageForm 后直接显示 Form1 就好了。
【解决方案4】:

只需添加一个 windows 窗体(让窗体的名称为 imgsplash)& 来自以下选项集:-

FormBorderStyle - 无
ShowInTaskBar - 错误
StartPosition - CenterScreen

在此表单中设置背景图像[您要在应用程序启动时显示的图像]

--现在在 program.cs 中添加以下步骤:-

       static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        imgsplash f = new imgsplash();
        f.Show();
        System.Threading.Thread.Sleep(2000);
        f.Close();
        Application.Run(new Form1());
    }

【讨论】:

    猜你喜欢
    • 2019-10-26
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 2016-06-06
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    相关资源
    最近更新 更多