更改父级时修复锚定

时间:2015-05-30 13:07:44

标签: c# .net visual-studio anchor parent

我有一个RichTextBox,一个Button和一个列表框,其中Anchor设置为Top,Bottom,Right。
每当我更改表单大小然后将其父级(从TabControl的一个选项卡更改为另一个)时位置搞砸了。

http://imgur.com/WiQhRJU,FyFIQTL,7K7HMTt,Nqrm20y

第一张图片:重新尺寸之前✓
第二张图片:重新调整尺寸后✓
第三张图片:在不同标签上重新调整大小后✖
第四张图片:切换回原始标签✖

这是我用来更改父级的代码:

private void tabTabs_Selected(object sender, TabControlEventArgs e)
{
    if (tabTabs.SelectedTab == tabChat || tabTabs.SelectedTab == tabCmd)
    {
        lstUsers.Parent = tabTabs.TabPages[tabTabs.SelectedIndex];
        rtbSend.Parent = tabTabs.TabPages[tabTabs.SelectedIndex];
        btnSend.Parent = tabTabs.TabPages[tabTabs.SelectedIndex];
    }
}

2 个答案:

答案 0 :(得分:0)

这是一种非常不寻常的用户界面方式。并不是说它一定是错的,但我认为你遇到了这种设计造成的许多潜在困难之一。

主要问题是您正在为不同的功能重用用户界面元素。聊天框成为另一个选项卡上的命令框,"发送"按钮将在一个选项卡上发送聊天消息,在另一个选项卡上发送命令等。每次切换标签时,您都必须非常小心地进行大量的房屋清洁并正确执行。这听起来过于复杂。

大多数用户界面将使用多个文本框,按钮等设计,每个选项卡一个。每个文本框或按钮都可以用于一个目的。如果您需要多个不同的元素来查看和表现相似,您可以使用样式,模板或创建自己的UserControl来帮助实现这一点。

该规则的例外是您的查看者列表。无论您使用哪个标签,看起来总是保持不变。如果是我,我只有一个查看器列表的实例,但我不会将其放在选项卡控件中。我只需将它放在标签控件旁边,这样您就可以随时看到它。

答案 1 :(得分:0)

我知道我迟到了一年,但我在选项卡和锚定方面遇到了同样的问题。我如何修复它是通过添加一个包含所有元素并设置Dock to Fill的面板。然后通过仅更改容器面板的父级,它可以完美地工作。实际上这是一个应该报告给MS的错误,但是现在这个解决方法非常有效。

编辑:您还可以通过双重缓冲所有控件(包括选项卡组,标签页,容器面板和容器面板内的所有元素)来更改标签时删除/删除轻弹。