修正了改变父级时的锚定

本文关键字:改变 | 更新日期: 2023-09-27 17:51:09

我有一个RichTextBox,一个按钮和一个列表框锚设置为上,下,右。
每当我改变表单的大小,然后改变他们的父(从TabControl的一个选项卡到另一个)他们的位置变得混乱。

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

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

这是我用来改变父元素的代码:

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];
    }
}

修正了改变父级时的锚定

我知道我晚了一年,但我刚刚有同样的问题标签和锚定。我如何修复它是通过添加一个包含所有元素的面板,并将Dock设置为填充。然后,通过仅更改该容器面板的父组件,它可以完美地工作。实际上,这是一个应该报告给微软的bug,但目前这个解决方案工作得很好。

编辑:您还可以通过双重缓冲所有控件(包括选项卡组,选项卡页,容器面板和容器面板内的所有元素)来减少/删除切换选项卡时的闪烁。

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

主要问题是您正在为不同的功能重用用户界面元素。聊天框变成了不同标签上的命令框,"发送"按钮将在一个标签上发送聊天消息,在另一个标签上发送命令,等等。每次更换标签时,你都必须非常小心地做大量的房屋清洁工作,而且要做得正确。听起来太复杂了。

大多数用户界面将被设计成使用多个文本框、按钮等,每个选项卡一个。每个文本框或按钮都只有一个目的。如果你需要几个不同的元素看起来和行为相似,你可以使用样式、模板,或者创建你自己的UserControls来帮助实现。

这个规则的例外是你的查看者列表。看起来不管你在哪个标签上,它总是保持不变的。如果是我,我只会有一个查看器列表实例,但我不会把它放在选项卡控件中。我把它放在标签控件旁边,这样你就能看到它了