Winforms C#:滚动更改按钮的位置?

时间:2014-04-10 09:12:22

标签: c# winforms scroll location

我正在研究一个关于winforms的项目,最近我意识到,如果我向下滚动然后会出现另一个按钮,它会显示在与我的意思不同的位置。我需要知道如何修复它,我的意思是如何使按钮出现在整个表单上的某个位置。

我有两个按钮,一个让另一个按钮出现 以下是代码示例:

public Form1()
{
    InitializeComponent();
    this.AutoScroll = true;
    this.Controls.Remove(button2);
}

private void button1_Click(object sender, EventArgs e)
{
    this.button2.Dock = DockStyle.None;
    this.button2.Anchor = (AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right);
    this.button2.Location = new System.Drawing.Point(110, 96);
    this.Controls.Add(button2);
}

private void button2_Click(object sender, EventArgs e)
{
    this.Controls.Remove(button2);
}

它不起作用。

3 个答案:

答案 0 :(得分:0)

如Scheien建议的那样,设置按钮的位置,并将Anchor属性设置为所需的值(Left,Top,Right,Bottom)。这将固定按钮相对于所选表单边缘的位置。

如果您的意思是即使用户滚动并读取某些文本也不希望按钮移动,请将按钮放在面板中并将面板停靠在表单底部(或任何您想要的位置)。您还可以使用拆分器控件并将按钮放在一个部分中,将内容放在另一个部分中。

答案 1 :(得分:0)

将按钮上的Anchor属性设置为Top, Left。然后它始终与顶部和左侧的长度相同。这也是默认设置。

确保Dock属性设置为None

        button1.Dock = DockStyle.None;
        button1.Location = new System.Drawing.Point(50, 50);
        button1.Anchor = (AnchorStyles.Top | AnchorStyles.Left);

当您将按钮添加到表单时,它会从顶部开始50个像素,从左侧开始50个像素,根据持有它的控件。在这种情况下,形式为:

this.Controls.Add(button1);

你确定x和y变量没有弄乱这个位置吗?

答案 2 :(得分:0)

请让自己更清楚:你写道滚动表格,对吗?

正常行为是每个控件,包括所有按钮,都会随移动。

这是你的问题还是还有另一个'运动'在继续?

由于之前的回复没有帮助,因此可以解决固定按钮的(有点异国情调)情况:

首先创建表单变量以保存原始Top值:

int oldButton1Top;

然后在Load事件中设置它:

public Form1()
{
   InitializeComponent();
   //..
   oldButton1Top = button1.Top;
   //
}

然后对表单的Scroll事件进行编码,如下所示:

private void Form1_Scroll(object sender, ScrollEventArgs e)
{
   button1.Top = oldButton1Top + e.NewValue - e.NewValue;
}

这应该让你的按钮固定在原来的位置。

BTW:在一个答案中,你被告知要在反对边缘将锚点设置为true。当窗口调整大小时,这将使按钮增长缩小并且不是你想要的