我正在编写一个WinForms应用程序,我的TabControl中的一个选项卡有一个SplitContainer.我将SplitterDistance保存在用户的应用程序设置中,但恢复不一致.如果带有拆分器的标签页可见,则恢复工作,拆分器距离就像我离开时一样.如果选择了其他选项卡,则分割器距离错误.
我发现了这个问题.在选中之前,每个标签页都不会调整大小以匹配标签控件.例如,如果设计器中的选项卡控件宽度为100像素,并且您在加载期间只将其设置为500像素,则在隐藏选项卡页面上将分割器距离设置为50将调整为分配器距离250时的大小您选择该标签页.
我通过在我的应用程序设置中记录SplitContainer的SplitterDistance和Width属性来解决它.然后在恢复时,我将SplitterDistance设置为recordedSplitterDistance*Width/recordedWidth.
小智 5
如前所述,使用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
}
Run Code Online (Sandbox Code Playgroud)