2011-09-26 136 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()); 
    }