2011-09-26 12 views
2

我有一个小的Windows窗体项目,现在Iam正在寻找项目启动时显示图像,我的意思是Program.cs项目启动时显示图像 - program.cs?

这可能吗?

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

      Application.Run(new Form1()); 
     } 
+2

你的意思是像一个闪屏? – BoltClock

+0

您正在创建一个启动画面。看看这个:http://www.google.com/search?gcx=w&sourceid=chrome&ie=UTF-8&q=c%23+splash+screen –

回答

6

当然...添加新的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。

+0

但问题是picturebox显示没问题。但图像不显示与picturebox ... – Paramu

+1

立即尝试。再次检查代码,我编辑它以添加将被阻塞的新线程,而不是主线程被阻塞的旧代码。 – Cipi

+0

感谢Cipi ...我明白了 – Paramu

1

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

+0

但问题是picturebox显示没有问题。但图像不显示与picturebox ... – Paramu

2

你的意思是一个闪屏,对不对?
考虑添加对Microsoft.VisualBasic的引用(如果尚未完成),然后设置WindowsFormsApplicationBase.SplashScreen属性。

数点:

  • Windows窗体不具有一个简单而直接闪屏的支持。
    即使上面的解决方案需要几秒钟,直到加载.net框架才能显示启动画面。
  • 请参阅此question here了解更多示例和重要说明。
  • 看到这个CodeProject.com sample自定义解决方案
+0

你不应该需要一个ref。到Microsoft.VisualBasic ... – IAbstract

+0

@IAbstract你能解释为什么不可以?我同意这看起来很奇怪,但您也可以添加对其他DLL的引用来使用它们的功能。 VisualBasic.dll由MS维护,是.net框架的组成部分,所以我没有看到任何问题。 – Marc

+0

请参阅@ Cipi的答案......不使用参考。我不一定同意他用来关闭表单的过程,但这并不正确。 – IAbstract

0

只需从选项设置下面添加一个Windows窗体(让表单的名称是imgsplash)&: -

FormBorderStyle - 无
ShowInTaskBar - 假
中StartPosition - 中心屏幕

以这种形式设置背景图像[你想在应用程序启动时显示的图像]

- 现在在程序中。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()); 
    }