使用autoscroll控制Windows.Forms.Panel内的位置

时间:2011-06-11 07:24:57

标签: .net winforms

Control.Location不考虑父面板控件的滑块位置,并返回值,如果没有滚动条。那么如何获得可滚动面板内某些控件的真实位置呢? 例如,我从来没有得到我的按钮的真实位置:

Button button;
        public Form1()
        {
            InitializeComponent();
            panel1.Height = 200;
            panel1.AutoScrollMinSize = new Size(0, 2000);
            button = new Button();
            panel1.Controls.Add(button);
            button.Top = 1500;
            button.Click += new EventHandler(button_Click);
        }

        void button_Click(object sender, EventArgs e)
        {
            MessageBox.Show(button.Location.Y.ToString());
        } 

1 个答案:

答案 0 :(得分:2)

确实如此。如果我将一个面板放在滚动面板中,位置位置会随着我滚动而改变:

Private Sub Panel1_Scroll(ByVal sender As Object, ByVal e As ScrollEventArgs) Handles Panel1.Scroll
  Me.Text = Panel2.Location.ToString
End Sub

确保您在另一个正在滚动的面板中没有您的控件,然后位置属性不会更改。

否则,请查看PointToScreen和PointToClient函数,或根据滚动父级的AutoScrollPosition值调整值。

相关问题