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

本文关键字:按钮 位置 滚动 Winforms | 更新日期: 2023-09-27 17:57:40

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

它不起作用。

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

正如scheien所建议的,将按钮的位置设置在所需的位置,并将Anchor属性设置为所需的值(Left、Top、Right、Bottom)。这将固定按钮相对于所选窗体边缘的位置。

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

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

确保Dock属性设置为None:

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

当您将按钮添加到窗体中时,它将从顶部和左侧各绘制50个像素,根据控制按钮的控件进行绘制。在这种情况下,形式:

this.Controls.Add(button1);

你确定x和y变量没有扰乱位置吗?

请让自己更清楚:您写过滚动表单,对吗?

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

这是你的问题,还是有另一场"运动"在进行?

由于之前的回复没有帮助,这里有一个解决固定按钮(有点奇怪)情况的解决方案:

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

int oldButton1Top;

然后在加载事件中设置:

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

然后对表单的滚动事件进行如下编码:

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

这样可以将按钮固定在原来的位置。

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