C#Winforms:将键盘重新设置为用户控件,如何保持键大小相对于控件容器?

时间:2018-02-07 10:16:06

标签: c# winforms user-controls

所以我们想在winforms上有一个自定义键盘(它将在触摸屏计算机上运行),所以我很快将其作为自定义用户控件制作,以便我们以后可以在必要时重新使用它。以下是它现在的样子:

enter image description here

如果我们将来必须调整它,我们也希望它能够扩展。我怎样才能确定,当我调整主UserControl(键盘本身,而不是任何键)时,按钮大小将保持相对?因此,例如,如果我将键盘的大小调整为25%(长度和宽度),我的所有按钮也必须调整大小。所以在按钮之间必须留有一些空白空间,如上图所示。

现在我尝试过使用Anchor&停靠按钮和UserControl的对接属性,自动调整大小和它们的大小,但遗憾的是我无法找到我想要的正确配置。

有没有人知道我如何调整自定义UserControl键盘的大小,同时还相对调整了里面的按钮大小?

编辑:例如,如果我将整个UserControl的高度增加100%(比如100px - > 200px),我希望我的3个按钮“Tab”,“Caps Lock”和“Shift”到现在也填充200px的高度,所以“伸展”它们。宽度相同。因此,如果我将UserControl的高度改为50%&宽度,我希望我的按钮相对于我的UserControl发生了变化。 因此,如果宽度改变了+ 100%,我仍然希望它与我的所有按钮水平填充。如果只改变宽度/高度,它当然会延伸。

2 个答案:

答案 0 :(得分:1)

这件事的源代码会有所帮助 但是没有它:

您是否使用行容器将控件自动保留在适当的位置?

如果是, 调整控件大小时,将顶部停靠行和底部停靠行的大小调整为总高度的1/3 在调整行容器大小时,容器中的每个控件都应根据其父高度来更新其宽度

答案 1 :(得分:0)

您可能必须手动实现此调整大小功能,因为Windows Forms实际上并不是为了支持这种功能而开箱即用。假设整体的默认大小为WH

现在,当应用首次加载时,您可以将所有按钮及其位置的默认大小保存到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 / WyFactor = 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 );