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());
}
答案 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值调整值。