所以我们想在winforms上有一个自定义键盘(它将在触摸屏计算机上运行),所以我很快将其作为自定义用户控件制作,以便我们以后可以在必要时重新使用它。以下是它现在的样子:
如果我们将来必须调整它,我们也希望它能够扩展。我怎样才能确定,当我调整主UserControl(键盘本身,而不是任何键)时,按钮大小将保持相对?因此,例如,如果我将键盘的大小调整为25%(长度和宽度),我的所有按钮也必须调整大小。所以在按钮之间必须留有一些空白空间,如上图所示。
现在我尝试过使用Anchor&停靠按钮和UserControl的对接属性,自动调整大小和它们的大小,但遗憾的是我无法找到我想要的正确配置。
有没有人知道我如何调整自定义UserControl键盘的大小,同时还相对调整了里面的按钮大小?
编辑:例如,如果我将整个UserControl的高度增加100%(比如100px - > 200px),我希望我的3个按钮“Tab”,“Caps Lock”和“Shift”到现在也填充200px的高度,所以“伸展”它们。宽度相同。因此,如果我将UserControl的高度改为50%&宽度,我希望我的按钮相对于我的UserControl发生了变化。 因此,如果宽度改变了+ 100%,我仍然希望它与我的所有按钮水平填充。如果只改变宽度/高度,它当然会延伸。
答案 0 :(得分:1)
这件事的源代码会有所帮助 但是没有它:
您是否使用行容器将控件自动保留在适当的位置?
如果是, 调整控件大小时,将顶部停靠行和底部停靠行的大小调整为总高度的1/3 在调整行容器大小时,容器中的每个控件都应根据其父高度来更新其宽度
答案 1 :(得分:0)
您可能必须手动实现此调整大小功能,因为Windows Forms实际上并不是为了支持这种功能而开箱即用。假设整体的默认大小为W
和H
。
现在,当应用首次加载时,您可以将所有按钮及其位置的默认大小保存到List
:
public class DefaultButtonLayout
{
public Button Control {get;set;}
public int X {get;set;}
public int Y {get;set;}
public int Width {get;set;}
public int Height {get;set;}
}
因此,首次加载时,您将生成默认列表,然后在Resize
事件处理程序中,您将首先计算键盘大小的变化因子,如xFactor = newW * 1.0 / W
和yFactor = newH * 1.0 / H
然后按顺序浏览列表并设置Control
属性:
Control.Left = ( int )( default.X * xFactor );
Control.Top = ( int )( default.Y * yFactor );
Control.Width = ( int )( default.Width * xFactor );
Control.Height = ( int )( default.Height * yFactor );