2008-11-25 42 views
0
  1. 我想創建一個從互聯網抓取的圖片的可滾動列表,並讓用戶能夠點擊它。我如何去在WinForms/C#中做這件事?是否有可能將picturebox控件/控件添加到列表框?從網上抓取圖片並按順序顯示

  2. 我試圖添加一個picturebox列表到UserControl與AutoScroll設置爲true,這會給我一個像使用listBox的感覺,這是一個正確的方法嗎?

  3. 我也嘗試將pictureBox的ImageLocation設置爲圖像的URI,然後調用Load()來加載圖像,但它確實有效,但是我的Form凍結了!我如何在不凍結我的表單的情況下以順序方式更新每個picturebox?

謝謝 Azlam

回答

1

我先回答你的第三個問題,監守這是唯一一個我真的知道答案。在圖片框上有一個LoadAsync()方法,它將在單獨的線程中加載圖像,並且不會掛起您的應用程序。

至於其他問題,我也很可能會從用戶控件開始,並將圖像放在那裏。我可以建議的唯一的事情是首先創建一個帶有圖片框的用戶控件,並且可能在其旁邊有多行文本框或richtextbox。關閉文本框的邊框,並在整個控件周圍有一個小小的邊框。這將允許您顯示圖像,旁邊有一些文字。然後,您的實際最終控制權將成爲這些控件的集合,並可根據需要添加它們。

- 我的2美分...

+0

謝謝,讓我試試loadAsync()方法,我正在做你提到的確切方法 – Azlam 2008-11-26 04:31:58

0

你介意垂直滾動?

我將開始與DataGridView控件爲基礎,創建以下實現:

1)創建自定義的列和單元格類型從DataGridViewImageColumn獲得。你可以稱它們爲「CronosNetImageColumn」,「CronosNetImageCell」。 2)創建一個類「CronosImageDetails」來保存單元格數據(包括顯示文本和圖像url的屬性)。這將作爲每個單元格的值傳入。例如:

ImageGrid.Rows.Add(new CronosImageDetails {DisplayText =「Day at the Beach」,ImageURL =「http://...beach.jpg」});

3)覆蓋單元格Paint()使用WebClient獲取圖像並使用e.Graphics.DrawImage(ImageObtainedFromWebClient)將圖像繪製到單元格中。您可以使用e.Graphics.DrawString((CronosImageDetails)value.DisplayText ...)覆蓋單元格中的文本。

這個快速解決方案將爲您提供一個滾動圖像列表,只有在用戶滾動瀏覽列表時才加載圖像,併爲改進提供了堅實的基礎。

推薦進一步優化:

A)創建一個後備緩衝位圖和圖形繪製單元數據。

B)設置paint()來簡單地畫後備緩衝,而不是做的工作來獲得圖像

C)創建一個新的細胞方法的LoadImage(),它產生一個新線程下載圖像和油漆它到後臺緩衝區。 D)Paint()(或一個單獨的輔助線程)跟蹤滾動的方向和加速度,並估計需要預加載哪些單元格。在這些單元上觸發LoadImage()。 E)用加載圖像初始化每個單元的後臺緩衝區。 F)跟蹤並使用來自圖像加載時間的經驗數據,以幫助確定哪些單元需要預加載。

相關問題