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

Winforms C#:滚动更改按钮的位置?,c#,winforms,scroll,location,C#,Winforms,Scroll,Location,我正在winforms上做一个项目,最近我意识到如果我向下滚动,然后导致另一个按钮出现,它会出现在不同的位置。我需要知道如何解决这个问题,我的意思是如何使按钮出现在整个表单的某个位置 我有两个按钮,一个使另一个出现 下面是一个代码示例: public Form1() { InitializeComponent(); this.AutoScroll = true; this.Controls.Remove(button2); } private void button1_

我正在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);
}

它不起作用。

正如scheien所建议的,将按钮的位置设置为所需的位置,并将锚属性设置为所需的值(左、上、右、下)。这将固定按钮相对于所选窗体边缘的位置


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

将按钮上的
锚定属性设置为
左上方
。那么它离顶部和左侧的距离总是相同的。这也是默认设置

确保
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变量没有弄乱位置吗?

请说清楚:你写的是滚动表单,对吗

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

这是你的问题还是有另一个“运动”正在进行

由于前面的回答没有帮助,这里有一个解决固定按钮(有点奇怪)问题的方法:

首先创建表单变量以保存原始的顶部值:

int oldButton1Top;
然后在加载事件中设置它:

public Form1()
{
   InitializeComponent();
   //..
   oldButton1Top = button1.Top;
   //
}
然后对表单的滚动事件进行如下编码:

private void Form1_Scroll(object sender, ScrollEventArgs e)
{
   button1.Top = oldButton1Top + e.NewValue - e.NewValue;
}
这将使您的按钮固定在其原始位置


顺便说一句:在一个答案中,你被告知要在相对的边缘将锚定设置为true。这将在窗口调整大小时使按钮变大或缩小,并且根本不是您想要的

检查按钮上的锚属性。它需要位于非常特定的位置我理解,但您尝试过什么?我尝试过锚和停靠,就像我之前所说的,如果它不起作用,那么您需要提供更多信息,在这种情况下,可能还需要提供UI的屏幕截图。我们不知道你的用户界面是什么样子。我试过了。this.options.Anchor=(AnchorStyles.Top);this.options.Location=新系统.图纸.点(x-90,y+80);但它不起作用,按钮仍在移动。这是因为你只把它固定在顶部。您需要将其固定到要固定按钮的所有边上。可能类似于button.Anchor=(AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right);我看到了你的代码片段。这里的问题是,在windows实际呈现控件之前,设置停靠和锚定是没有意义的。我建议您在窗体加载时创建两个按钮,并使其中一个按钮不可见,而不是将其从控件集合中删除。在每个按钮上,单击处理程序切换两个按钮的可见性。您可以使用按钮。Visible属性。我尝试将它们更改为数字,但仍然无效。非常感谢。。实际上我用另一种方式修复了它,但非常感谢