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);
}
它不起作用。
正如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。这将使按钮增长或收缩当窗口调整大小时,并且确实不是您想要的