2009-12-24 151 views
0

當十個分量固定的控制位置我有一個大的自定義面板是Panel2即在父面板PANEL1滾動的左中部的標籤label1的滾動面板

alt text http://lh4.ggpht.com/_1TPOP7DzY1E/SzNN2g9Sv4I/AAAAAAAAC1U/A_LlLOoejX8/s800/formScroll.png

我會始終保持在是Panel2的可見光左中間LABEL1,滾動時也是如此。

在實際的例子中,我的面板是一個用戶控件,生成左邊的一些標籤。面板滾動,但我需要保持標籤始終可見。

如何實現?

這是我的代碼:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     this.InitializeComponent(); 
    } 

    protected Point clickPosition; 
    protected Point scrollPosition; 

    private void panel2_MouseDown(object sender, MouseEventArgs e) 
    { 
     this.clickPosition = e.Location; 
    } 

    private void panel2_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Left) 
     { 
      this.SuspendLayout(); 
      this.scrollPosition += (Size)clickPosition - (Size)e.Location; 
      this.panel1.AutoScrollPosition = scrollPosition; 
      this.ResumeLayout(false); 
     } 
    } 
} 

回答

0
public Form1() 
    { 
     this.InitializeComponent(); 
     panel2.Paint += new PaintEventHandler(panel2_Paint); 
    } 

    void panel2_Paint(object sender, PaintEventArgs e) 
    { 
     label1.Location = 
      new Point(-panel1.AutoScrollPosition.X, label1.Location.Y); 
    } 
1

嗯,這在技術上是可行的,你只需要ŧ o面板滾動時調整控制位置。例如:

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     mPicturePos = pictureBox1.Location; 
    } 
    Point mPicturePos; 
    private void panel1_Scroll(object sender, ScrollEventArgs e) { 
     pictureBox1.Location = mPicturePos; 
    } 
    } 

但是,您會看到當您滾動面板時,控件將開始執行pogo。這裏的問題在於Windows太有幫助。它使用快速bitblt滾動窗口內容,然後僅爲需要重新繪製的窗口部分發送繪畫請求。

它通過名爲「在拖動時顯示窗口內容」的系統選項執行此操作,可在「控制面板」中的「顯示」小程序的「外觀+效果」對話框中使用。您無法合理地關閉此選項,它具有系統範圍的影響。在Win7上它甚至不再暴露。

除此之外,沒有很好的解決方法:不要將控件放在面板中。只要確保它位於面板的頂部。這對設計師來說可能有點棘手,把它放在面板的旁邊(如果需要的話帶到前面)並手工編輯位置屬性。

+0

我認爲,而不是我的例子中的pictureBox1我應該使用panel2 ...但。我試過你的代碼 - 任何改變。我需要保持標籤不是panel2(PictureBox在您的代碼中) – serhio 2009-12-24 15:01:29

+0

Erm,我的建議是*不*將控件放在面板中。 – 2009-12-24 15:14:55

+0

在實際的例子中,我的面板是一個用戶控件,它在其左側生成*(創建並控制添加)一些標籤。面板滾動,但我需要保持標籤始終可見。我將用這些信息來完成這個問題。 – serhio 2009-12-28 09:24:06