我正在使用以下代码调整自定义控件的大小:
private void Form1_Resize_1(object sender, EventArgs e)
{
textBox1.Text = this.Width.ToString();
textBox2.Text = (this.Height - 200).ToString();
canvas21.Size = new System.Drawing.Size(this.ClientSize.Width, this.ClientSize.Height - this.Top - 15);
canvas21.Invalidate();
}
我只想让自定义控件(0,105)的左上角保持原位,并且控件要随表单一起调整大小,但由于某种原因,这不起作用。当我调整控件的大小时,会自动调整大小以填写表单的其余部分。
有没有办法获取影响usercontrol大小的所有内容的列表。为了搜索我设定的其他地方,我可能会忽略它?
答案 0 :(得分:6)
如果您希望控件始终使用表单调整大小,可以使用Anchor属性将其设置为锚定到表单的一侧或多侧,这样您就不必拥有自己的控件调整代码大小(假设您使用此标准调整大小功能符合您的需求)。
您必须确保未设置Dock属性,否则它可能会填满整个表单(或表单的一侧,具体取决于设置)。
答案 1 :(得分:4)
真的没有理由为什么设置高度然后锚定到每一侧(对接设置为无)都不起作用。
但是,我确实注意到您提供的代码的逻辑错误。你有:
canvas21.Size = new System.Drawing.Size(this.ClientSize.Width, this.ClientSize.Height - this.Top - 15);
实际应该是:
canvas21.Size = new System.Drawing.Size(this.ClientSize.Width, this.ClientSize.Height - this.canvas21.Top - 15);
你只是占据了表单的顶部,而不是canvas21的顶部,这就是你需要的。
这似乎完全符合您的要求,至少从我的角度来看。如果它不能正常工作,是不是根本没有为你调整大小,还是调整到错误的大小?
答案 2 :(得分:2)
如果可以设置,使用Anchor属性是更好的方法。要锁定的是
left, top, right, bottom (all!)
Anchor让你可以控制x个单位形成你已经锁定的一侧,这样它与两侧的距离总是相同的。
如果这不是一个选项,或者只是为了让你的代码继续下去,试试这个
private void Form1_Resize_1(object sender, EventArgs e)
{
textBox1.Text = this.Width.ToString();
textBox2.Text = (this.Height - 200).ToString();
int iTop = canvas21.Top;
int iLeft = canvas21.Left;
// - 200 - iTop keeps it 200 from the bottom, -iLeft keeps i stuck to right
canvas21.Size = new System.Drawing.Size(this.Width -iLeft, this.Height-200 -iTop);
canvas21.Left = iLeft; // move back
canvas21.Top = iTop; // move back
canvas21.Invalidate();
}
要保持15 pixels in the bottom
,请将200
上方更改为15
。或者,在设计时或通过代码将其设置为15,激活bottom
锚点。
答案 3 :(得分:0)
对于自定义控件以外的控件,您可以正确调整大小吗?例如,如果您放入一个richtextbox并相应地设置Anchor(全部),它会为您正确调整大小吗?如果确实如此,那么控制器的尺寸肯定会有些腥味,但是你可以通过这样做来欺骗它......
如果您的面板当然没有正确调整大小,那么这对您不起作用。当然,这可能是一个基础代码问题的解决方法,在一个完美的世界中,它将在控件本身上被重新编写。
答案 4 :(得分:0)
我正在调整用户控件的大小,我正在使用许多不同的事件来处理这个问题(例如,OnSizeChanged,OnFontChanged,OnTextChanged)
根据您的控件中文本框的适用方式会有所不同,但如果您的主容器具有属性AutoScaleMode或AutoSize,那么您可能会发现您没有捕获所有相关事件。
如果我因为我不熟悉这种事情,我会提前通知。
PS。我最初没有找到你的帖子,因为我一直在寻找标签Windows-forms-designer和custom-control。我真的不知道我应该使用哪些标签,并且不能使用所有可能性,因为5的限制接管了!
答案 5 :(得分:0)
private void Form1_Resize_1(object sender, EventArgs e)
{
textBox1.Text = this.Width.ToString();
textBox2.Text = (this.Height - 200).ToString();
canvas21.Size = new System.Drawing.Size(this.ClientSize.Width,
this.ClientSize.Height - canvas21.Top - 15);
canvas21.Invalidate();
}