2012-02-27 118 views
1

介紹奇怪的自動滾屏的行爲

我寫了一個簡單的用戶控制。

該控件包含一個FlowLayoutPanel和一個按鈕。

按鈕單擊事件處理程序如下:

private void uxAdd_Click(object sender, EventArgs e) 
{ 
    count++; 
    Label label = new Label(); 
    label.Text = "Label " + count.ToString(); 
    uxFlowLayout.Controls.Add(label); 
} 

Add按鈕添加一個標籤到FlowLayoutPanel而且由於FlowLayoutPanel.AutoSize和控制的AutoSize屬性等於真實FlowLayoutPanel.FlowDirection等於TopDown控制會身高增加。

我已將我的用戶控件放在窗體上,並將窗體的AutoScroll屬性設置爲true。

而且我寫了下面佈局事件處理程序:

private void MainForm_Layout(object sender, LayoutEventArgs e) 
{ 
    uxSection.Width = this.ClientSize.Width; 
} 

uxSection是我在介紹部分的開頭講的用戶控件)

問題

這是我在做什麼:

步驟0。運行該程序。

步驟1。添加幾個標籤,以便顯示垂直滾動條。

步驟2。滾動到表單底部。

步驟3。水平調整窗體大小。

enter image description here

正如你所看到的,調整後的形式,滾動條位置是不是在底部(我希望它是在底部)。

所以問題是,我錯過了什麼?爲什麼滾動條重置到頂部?

+2

爲什麼它看起來像滾動條是在窗體上,而不是在UserControl? FlowLayoutPanel中的按鈕也是?標籤無法獲得焦點,但您的按鈕可以,這就是爲什麼它滾動回到視圖。 WinForms試圖幫助用戶在屏幕上顯示活動控件。 – LarsTech 2012-02-28 13:57:23

+0

@LarsTech:現貨! – RvdK 2012-02-28 14:11:25

+0

@LarsTech:謝謝你的提示。經過一番谷歌搜索後,我發現了一個解決方法:http://nickstips.wordpress.com/2010/03/03/c-panel-resets-scroll-position-after-focus-is-lost-and-regained/ – 2012-02-29 07:31:46

回答

0

發生這種情況是因爲整個控件在調整大小時重新繪製。

您需要將滾動條的位置保存在變量中,以便在發生調整大小事件時可以重置滾動條的位置,或者您想要將滾動條推到底部通過使用列表中的項目數來觸發調整大小事件時列出底部元素的位置,然後將滾動條推送到該位置。