When visual studio designer adds the following lines to the code, my app UI undergoes some undesirable displacement.
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
:
:
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
How can I prevent it?
Edition:
I created a new simple project with only two nested SplitContainer
s and encountered the same issue.
►Problem:
As it's been marked in the following code, SplitterWidth
of splUpperSection
remains unchanged! If you remove BeginInit
and EndInit
methods, this property (SplitterWidth
) will be changed! Is it a farmework BUG???
The InitializeSplitContainers
method contains exactly the code that Visual Studio designer generates automatically. You also can simply create a new Form and add two nested split containers to it which have a SplitterWidth
of 1 to touch the problem easily.
►Code:
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace TestApp
{
public partial class Form1 : Form
{
//
// SplitContainers
//
private SplitContainer splBase;
private SplitContainer splUpperSection;
/// <summary>
/// The form has initially no child control.
/// </summary>
public Form1()
{
InitializeComponent();
InitializeSplitContainers();
}
private void InitializeSplitContainers()
{
this.splBase = new SplitContainer();
this.splUpperSection = new SplitContainer();
((ISupportInitialize)(this.splBase)).BeginInit();
this.splBase.Panel1.SuspendLayout();
this.splBase.SuspendLayout();
((ISupportInitialize)(this.splUpperSection)).BeginInit();
this.splUpperSection.SuspendLayout();
this.SuspendLayout();
//
// splBase
//
this.splBase.BackColor = Color.Red;
this.splBase.Dock = DockStyle.Fill;
this.splBase.FixedPanel = FixedPanel.Panel1;
this.splBase.IsSplitterFixed = true;
this.splBase.Location = new Point(0, 0);
this.splBase.Name = "splBase";
this.splBase.Orientation = Orientation.Horizontal;
//
// splBase.Panel1
//
this.splBase.Panel1.Controls.Add(this.splUpperSection);
//
// splBase.Panel2
//
this.splBase.Panel2.BackColor = Color.White;
this.splBase.Size = new Size(400, 400);
this.splBase.SplitterDistance = 115;
this.splBase.SplitterWidth = 1;
this.splBase.TabIndex = 0;
//
// splUpperSection
//
this.splUpperSection.BackColor = Color.Chartreuse;
this.splUpperSection.Dock = DockStyle.Fill;
this.splUpperSection.FixedPanel = FixedPanel.Panel1;
this.splUpperSection.IsSplitterFixed = true;
this.splUpperSection.Location = new Point(0, 0);
this.splUpperSection.Name = "splUpperSection";
this.splUpperSection.Orientation = Orientation.Horizontal;
//
// splUpperSection.Panel1
//
this.splUpperSection.Panel1.BackColor = Color.White;
//
// splUpperSection.Panel2
//
this.splUpperSection.Panel2.BackColor = Color.White;
this.splUpperSection.Size = new Size(400, 115);
this.splUpperSection.SplitterDistance = 25; // ←Will be set
this.splUpperSection.SplitterWidth = 1; // ←Won't be set (stays: 4)
this.splUpperSection.TabIndex = 0;
//
// Form1
//
this.AutoScaleDimensions = new SizeF(6F, 13F);
this.AutoScaleMode = AutoScaleMode.Font;
this.ClientSize = new Size(400, 400);
this.Controls.Add(this.splBase);
this.Name = "Form1";
this.Text = "Bug Form";
this.splBase.Panel1.ResumeLayout(false);
((ISupportInitialize)(this.splBase)).EndInit();
this.splBase.ResumeLayout(false);
((ISupportInitialize)(this.splUpperSection)).EndInit();
this.splUpperSection.ResumeLayout(false);
this.ResumeLayout(false);
}
}
}
►Workaround:
public Form1()
{
//
// Initializing components including split-containers..
//
InitializeComponent();
{
//
// keeping initializing on..
//
splBase.SplitterWidth = 1;
splUpperSection.SplitterWidth = 1;
}
}