2014-10-22 96 views
0

我在Vs2010中有一個表單項目。 這是我的場景: 我創建了一個表單,我希望像啓動畫面一樣使用無邊框。在裏面,我有一個很像圖片的圖片框。 我設置圖像導入它,並在設計師我可以看到它。 但是,當我從其他窗體調用splashscreen窗體並顯示它時,我只能看到圖片框邊框,但不會加載圖像。圖片框不顯示圖像

更新

我加載啓動畫面中BmForm_Load(其他形式):

SplashScreen ss = new SplashScreen(); 
ss.TopMost = true; 
ss.Show(); 
//Prepare bmForm.... 
ss.Close(); 

而且這是在閃屏形式的圖片框設計的代碼片段:

this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 
this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill; 
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); 
this.pictureBox1.ImageLocation = ""; 
this.pictureBox1.InitialImage = null; 
this.pictureBox1.Location = new System.Drawing.Point(0, 0); 
this.pictureBox1.Name = "pictureBox1"; 
this.pictureBox1.Size = new System.Drawing.Size(256, 256); 
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; 
this.pictureBox1.TabIndex = 0; 
this.pictureBox1.TabStop = false; 
this.pictureBox1.WaitOnLoad = true; 

更新2

如果在其他表單加載結束之前未關閉splashScreen表單,則會在此之後顯示圖像!

問題

有人知道爲什麼沒有圖片顯示?

+0

你導入的圖像作爲資源到項目或直接鏈接到圖像文件? – 2014-10-22 12:26:20

+0

@BerndLinde我已經將圖像導入爲資源,但如果我直接鏈接圖像文件(我嘗試使用多個圖像),則同樣的問題仍然存在。 – SamDroid 2014-10-22 12:51:37

+0

您能否顯示用於從其他窗體顯示窗體的代碼以及pictureBox的設計器代碼片段? – 2014-10-22 13:05:00

回答

1

什麼問題似乎是,你BmForm的準備主UI線程正試圖加載啓動圖像以及處理這些命令,準備BmForm鎖定下來。
爲了解決這個問題,在自己的線程中加載splash形式,並在完成加載時關閉線程/表單。代碼

例子:

您BmForm_Load

Thread splashThread = new Thread(ShowSplash); 
splashThread.Start(); 

// Initialize bmForm 

splashThread.Abort(); 
// This is just to ensure that the form gets its focus back, can be left out. 
bmForm.Focus(); 

裏面的方法來顯示啓動畫面

private void ShowSplash() 
{ 
    SplashScreen splashScreen = null; 
    try 
    { 
    splashScreen = new SplashScreen(); 
    splashScreen.TopMost = true; 
    // Use ShowDialog() here because the form doesn't show when using Show() 
    splashScreen.ShowDialog(); 
    } 
    catch (ThreadAbortException) 
    { 
    if (splashScreen != null) 
    { 
     splashScreen.Close(); 
    } 
    } 
} 

您可能需要在using System.Threading;添加到您的併爲BmForm_Load添加一些額外的錯誤處理事件發生時會發生錯誤,以便您可以清理splashThread。

你可以閱讀更多關於線程here

+0

非常感謝! – SamDroid 2014-10-22 15:01:19