我有一个.NET 4.5 WinForm,可以在表单加载时检查是否存在某个文件。如果满足条件,我将完整显示表单。如果文件不存在,我想隐藏(将Visible
属性设置为false)表单上的所有其他组件时显示简单的文本消息。
我的问题是,我要显示的Label
只能位于GroupBox
之上。好吧,不仅仅是 ,但在那个位置最美观。如果我将容器的可见性设置为false,那么它也会隐藏该消息。
有没有办法从GroupBox“打破”标签?
最糟糕的是,我会隐藏GroupBox中的各个组件,并与剩下的边界一起生活。我很好奇是否有办法做到这一点。
答案 0 :(得分:1)
我发现只使用设计师的解决方案。 ChrisF的回答让我思考,正确的方法不是将标签放在容器后面,而是将容器放在标签的顶部。这似乎是VS设计师的一个怪癖 我创建了一个新的WinForm,并添加了一个标签和一个组合框,没有两个重叠。然后:
就是这样......标签出现在容器后面。我猜设计师在两个组件具有相同的父容器时正确地记录了z-index,并且将标签放在groupbox的顶部会更改其父容器。
答案 1 :(得分:0)
要使表单上的标签位于所需位置,但在组框外部使用“发送回”选项将其推送到组框后面。它在设计时不可见,但它会在正确的位置。
然后,如果找不到该文件,您可以使组框不可见,露出背后的标签。
另一种方法是将标签放在组框外(左侧或右侧和表格外侧),然后将其移动到位置,同时使其可见。
答案 2 :(得分:0)
我知道您希望设计支持的功能能够在设计时正确定位您的标签,但是这样做会将组框设置为标签的父级,不能拖动删除表单上的标签。因此,只需尝试使用以下代码在运行时将Parent从groupbox更改为表单并维护设计位置,这样更改组框的可见性不会影响标签的可见性:
public Form1(){
InitializeComponent();
Load += (s,e) => {
var loc = label1.PointToScreen(Point.Empty);
label1.Parent = this;
label1.Location = PointToClient(loc);
};
}