Когда дизайнер Visual Studio добавляет в код следующие строки, пользовательский интерфейс моего приложения подвергается нежелательному смещению.
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
:
:
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
Как я могу предотвратить это?
Издание:
Я создал новый простой проект только с двумя вложенными SplitContainer
и столкнулся с той же проблемой.
►Проблема:
Как отмечено в следующем коде, SplitterWidth
из splUpperSection
остается неизменным! Если вы удалите методы BeginInit
и EndInit
, это свойство (SplitterWidth
) будет изменено! Это ошибка фермы???
Метод InitializeSplitContainers
содержит именно тот код, который конструктор Visual Studio генерирует автоматически. Вы также можете просто создать новую форму и добавить в нее два вложенных разделенных контейнера, которые имеют SplitterWidth
из 1, чтобы легко решить проблему.
►Код:
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);
}
}
}
►Временное решение:
public Form1()
{
//
// Initializing components including split-containers..
//
InitializeComponent();
{
//
// keeping initializing on..
//
splBase.SplitterWidth = 1;
splUpperSection.SplitterWidth = 1;
}
}
SplitterWidth
, иPanel1MinSize
были установлены (изменены), но после вызоваEndInit
SplitterWidth
не будет установлено, аPanel1MinSize
будет установлено!! Отсутствие установкиSplitterWidth
приводит к смещению. Но почему? Почему не ставится??? 26.04.2012