当前位置:  开发笔记 > 编程语言 > 正文

在TabControl中恢复SplitterDistance是不一致的

如何解决《在TabControl中恢复SplitterDistance是不一致的》经验,为你挑选了3个好方法。

我正在编写一个WinForms应用程序,我的TabControl中的一个选项卡有一个SplitContainer.我将SplitterDistance保存在用户的应用程序设置中,但恢复不一致.如果带有拆分器的标签页可见,则恢复工作,拆分器距离就像我离开时一样.如果选择了其他选项卡,则分割器距离错误.



1> 小智..:

有一个更简单的解决方案.如果在SplitContainer.FixedPanel属性中将Panel1设置为固定面板,则它们都按预期运行.



2> Don Kirkby..:

我发现了这个问题.在选中之前,每个标签页都不会调整大小以匹配标签控件.例如,如果设计器中的选项卡控件宽度为100像素,并且您在加载期间只将其设置为500像素,则在隐藏选项卡页面上将分割器距离设置为50将调整为分配器距离250时的大小您选择该标签页.

我通过在我的应用程序设置中记录SplitContainer的SplitterDistance和Width属性来解决它.然后在恢复时,我将SplitterDistance设置为recordedSplitterDistance*Width/recordedWidth.



3> 小智..:

如前所述,使用SplitContainer进行控制不会调整大小以匹配选项卡控件,直到它被选中.如果在FixedPanel.None的情况下通过设置SplitterDistance的百分比(storedDistance*fullDistance/100)来处理恢复,则由于计算的精确性,您将看到分离器在一段时间内移动.

我找到了解决这个问题的另一种方案 我订阅了其中一个事件,例如Paint事件.此事件在控件调整大小后发生,因此SplitContainer将具有正确的值.首次恢复后,您应取消订阅此活动,以便仅恢复一次:

private void MainForm_Load(object sender, EventArgs e)
{
    splitContainerControl.Paint += new PaintEventHandler(splitContainerControl_Paint);
}

void splitContainerControl_Paint(object sender, PaintEventArgs e)
{
    splitContainerControl.Paint -= splitContainerControl_Paint;
    // Handle restoration here
}

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有