隐藏容器但不定位文本

时间:2013-11-29 23:04:18

标签: c# .net winforms visual-studio

我有一个.NET 4.5 WinForm,可以在表单加载时检查是否存在某个文件。如果满足条件,我将完整显示表单。如果文件不存在,我想隐藏(将Visible属性设置为false)表单上的所有其他组件时显示简单的文本消息。
我的问题是,我要显示的Label只能位于GroupBox之上。好吧,不仅仅是 ,但在那个位置最美观。如果我将容器的可见性设置为false,那么它也会隐藏该消息。

misbehaving label

有没有办法从GroupBox“打破”标签?
最糟糕的是,我会隐藏GroupBox中的各个组件,并与剩下的边界一起生活。我很好奇是否有办法做到这一点。

3 个答案:

答案 0 :(得分:1)

我发现只使用设计师的解决方案。 ChrisF的回答让我思考,正确的方法不是将标签放在容器后面,而是将容器放在标签的顶部。这似乎是VS设计师的一个怪癖 我创建了一个新的WinForm,并添加了一个标签和一个组合框,没有两个重叠。然后:

  1. 右键单击标签并发送至后退,或者右键单击容器并发送至前端
  2. 拖动容器或调整容器大小以覆盖标签
  3. 就是这样......标签出现在容器后面。我猜设计师在两个组件具有相同的父容器时正确地记录了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);
  };
}