.net 控件在Windows.Forms.Panel中的位置,带有autoscroll

.net 控件在Windows.Forms.Panel中的位置,带有autoscroll,.net,winforms,.net,Winforms,Location不考虑父面板控件的滑块位置,并返回值,就像没有滚动条一样。那么,如何获得可滚动面板中某些控件的真实位置呢? 例如,在这里,我从未获得按钮的真实位置: Button button; public Form1() { InitializeComponent(); panel1.Height = 200; panel1.AutoScrollMinSize = new Size(0,

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());
        } 

是的。如果我将面板放在滚动面板内,则位置会随着我的滚动而改变:

Private Sub Panel1_Scroll(ByVal sender As Object, ByVal e As ScrollEventArgs) Handles Panel1.Scroll
  Me.Text = Panel2.Location.ToString
End Sub
确保您的控件不在另一个正在滚动的面板中,则location属性不会更改


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

我已经附加了一些代码示例,很抱歉不清楚。我刚刚意识到AutoSctollPosition将真正解决我的问题,谢谢!