2012-02-22 18 views
0

技術進行調整:.NET 4,C#,的WinForms,Visual Studio 2010中如何使一個圖片填充用戶控件,同時在設計

大小定製UserControl時,我遇到了一個問題。客戶UserControl僅包含一個PictureBox,其屬性設置爲在需要時顯示滾動條。

UserControl具有以下屬性中設置:

  • AutoScaleMode:字體
  • 自動滾屏:真
  • DoubleBuffered:真
  • 的minimumSize:100,100
  • 面積:250,250

The PictureBox具有以下屬性設置:

  • 主持人:頂部,左側
  • 地點:0,0
  • 尺寸:250,250
  • 邊模:自動調整大小

在設計視圖對於自定義控件,PictureBox填充整個像是所需的。然而,在設計師的主要應用程序視圖中,自定義UserControl初始爲250 x 250,就像它的設計者展示的一樣,但是當我調整其大小以適合主應用程序時,只調整了UserControl面板的大小,而將PictureBox保留爲原始的250 x 250.我公開的其中一個屬性是在PictureBox內的鼠標光標X,Y位置,並且當沒有加載圖像時,該屬性不會在250 x 250區域外面返回任何內容。

我曾嘗試:

  • 設置Anchor屬性爲上,左,右,下,但會要求UserControl不顯示滾動條。
  • 設置要填充的PictureBox的Dock屬性,但這也導致UserControl不顯示滾動條。

我怎樣才能使它使得PictureBox總是UserControl的全尺寸,即使在設計師進行調整?

+0

爲什麼你需要顯示滑動條如果PictureBox填充UserControl? – 2012-02-22 18:49:43

+0

是的,我可以看到這不清楚。在主應用程序中,PictureBox通常比UserControl大,因此將具有滾動條。我的問題是,當主應用程序啓動時,PictureBox是它在設計器中創建的大小,無論UserControl目前的大小如何。它不再按照需要填充UserControl。 – Noren 2012-02-22 18:56:12

+0

您已將圖片框的'SizeMode'屬性設置爲'AutoSize',因此當您在圖片框的Image屬性中設置圖片時,圖片框應調整其大小以匹配圖片的大小。你設置了'Image'屬性嗎? – 2012-02-22 18:58:50

回答

1

您需要用戶控件上的滾動條,因此當用戶控件小於圖片庫中顯示的圖片時,用戶可以滾動查看圖片的其他部分,對嗎?並且,當用戶控件大於圖片框時,您希望圖片框填充用戶控件(因此您無法在圖片框上捕捉鼠標事件)。對?

首先,您還可以在用戶控件(除了圖片框)上訂閱鼠標事件以執行所需的操作。如果這是不適用的,你可以這樣做:

處理用戶控件的Resize事件,並更改圖片框的方面:

(把這個在你的用戶控件)

protected override void OnResize(EventArgs e) 
    { 
     base.OnResize(e); 

     MaintainPictureBoxSize(); 
    } 

    private void MaintainPictureBoxSize() 
    { 
     pictureBox1.SizeMode = PictureBoxSizeMode.Normal; 

     pictureBox1.Location = new Point(); 
     pictureBox1.Size = new Size(); 

     var clientSize = this.ClientSize; 

     if (pictureBox1.Image == null) 
      pictureBox1.Size = clientSize; 
     else 
     { 
      Size s = pictureBox1.Image.Size; 
      pictureBox1.Size = new Size(
       clientSize.Width > s.Width ? clientSize.Width : s.Width, 
       clientSize.Height > s.Height ? clientSize.Height : s.Height); 
     } 
    } 

當您更改PictureBoxImage時,還請致電MaintainPictureBoxSize方法。
這樣做的效果是,當圖片框中顯示的圖片的寬度或高度小於用戶控件時,圖片框將展開以填充用戶控件,如果不是,則圖片框的大小爲圖像的大小,所以顯示滾動條。

+0

我試過了你的代碼片段,它導致滾動條總是被繪製,如果沒有圖像被加載時,「PictureBox」應該與'UserControl'大小相同。 – Noren 2012-02-22 19:25:55

+0

我更改了代碼。嘗試一下並告訴我結果。 – 2012-02-22 19:35:21

+0

這造成了一些奇怪的行爲。最初,不存在滾動條。當我增加表單的大小(在任何圖像被加載之前),仍然沒有滾動條存在。但是,當我減小表單的大小(甚至是最大化)時,滾動條會出現並保持不變,直到我再次調整爲較大的大小。 – Noren 2012-02-22 19:47:11

相關問題