Split Container. Panel1 Свойство
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Получает левую или верхнюю панель объекта SplitContainer в зависимости от значения Orientation.
public: property System::Windows::Forms::SplitterPanel ^ Panel1 < System::Windows::Forms::SplitterPanel ^ get(); >;
public System.Windows.Forms.SplitterPanel Panel1
member this.Panel1 : System.Windows.Forms.SplitterPanel
Public ReadOnly Property Panel1 As SplitterPanel
Значение свойства
Если значение Orientation равно Vertical , выбирается левая панель объекта SplitContainer. Если значение Orientation равно Horizontal , выбирается верхняя панель объекта SplitContainer.
Комментарии
Используйте свойство , Panel1 чтобы настроить левую панель вертикальной SplitContainer или верхнюю панель горизонтального SplitContainer. Например, можно указать минимальный размер панели, изменив значение Panel1MinSize свойства , присвоив свойству Panel1 FixedPanel значение , чтобы панель оставалась прежней при изменении размера контейнера, или можно было получить или задать свойства панели BackgroundImage и BackgroundImageLayout .
Если Panel1 или Panel2 не содержит элемента управления, который может получить фокус, фокус остается на разделитель при щелчке. Чтобы изменить фокус на Panel1 или , задайте TabIndex для свойства значение Panel2 0, а TabIndex для свойства — Panel1Panel2значение 1.
Если Panel1 или Panel2 не содержит элемента управления, который может получить фокус, фокус остается на разделитель при щелчке. Чтобы изменить фокус на Panel1 или , задайте TabIndex для свойства значение Panel2 0, а TabIndex для свойства — Panel1Panel2значение 1.
Vb net как синхронизировать прокрутку панелей splitcontainer
Элемент TabControl позволяет создать элемент управления с несколькими вкладками. И каждая вкладка будет хранить некоторый набор других элементов управления, как кнопки, текстовые поля и др. Каждая вкладка представлена классом TabPage.
Чтобы настроить вкладки элемента TabControl используем свойство TabPages. При переносе элемента TabControl с панели инструментов на форму по умолчанию создаются две вкладки — tabPage1 и tabPage2. Изменим их отображение с помощью свойства TabPages:

Нам откроется окно редактирования/добавления и удаления вкладок:

Каждая вкладка представляет своего рода панель, на которую мы можем добавить другие элементы управления, а также заголовок, с помощью которого мы можем переключаться по вкладкам. Текст заголовка задается с помощью свойства Text.

Управление вкладками в коде
Для добавления новой вкладки нам надо ее создать и добавить в коллекцию tabControl1.TabPages с помощью метода Add:
//добавление вкладки TabPage newTabPage = new TabPage(); newTabPage.Text = "Континенты"; tabControl1.TabPages.Add(newTabPage);
Удаление так же просто:
// удаление вкладки // по индексу tabControl1.TabPages.RemoveAt(0); // по объекту tabControl1.TabPages.Remove(newTabPage);
Получая в коллекции tabControl1.TabPages нужную вкладку по индексу, мы можем ей легко манипулировать:
// изменение свойств tabControl1.TabPages[0].Text = "Первая вкладка";
SplitContainer
Элемент SplitContainer позволяет создавать две разделенные сплитером панели. Изменяя положение сплитера, можно изменить размеры этих панелей.

Используя свойство Orientation , можно задать горизонтальное или вертикальное отображение сплитера на форму. В данном случае это свойство принимает значения Horisontal и Vertical соответственно.
В случае, когда надо запретить изменение положения сплиттера, то можно присвоить свойству IsSplitterFixed значение true . Таким образом, сплитер окажется фиксированным, и мы не сможем поменять его положение.
По умолчанию при растяжении формы или ее сужении также будет меняться размер обеих панелей сплитконтейнера. Однако мы можем закрепить за одной панелью фиксированную ширину (при вертикальной ориентации сплиттера) или высоту (при горизонтальной ориентации сплиттера). Для этого нам надо установить у элемента SplitContainer свойство FixedPanel . В качестве значения оно принимает панель, которую надо зафиксировать:

Чтобы изменить положение сплитера в коде, мы можем управлять свойством SplitterDistance , которое задает положение сплиттера в пикселях от левого или верхнего края элемента SplitContainer. А с помощью свойства SplitterIncrement можно задать шаг, на который будет перемещаться сплиттер при движении его с помощью клавиш-стрелок.
Чтобы скрыть одну из двух панелей, мы можем установить свойство Panel1Collapsed или Panel2Collapsed в true
Split Container Класс
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет элемент управления, состоящий из подвижной строки, которая разделяет область отображения контейнера на две панели с изменяемыми размерами.
public ref class SplitContainer : System::Windows::Forms::ContainerControl
public ref class SplitContainer : System::Windows::Forms::ContainerControl, System::ComponentModel::ISupportInitialize
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDispatch)] [System.Runtime.InteropServices.ComVisible(true)] [System.Windows.Forms.Docking(System.Windows.Forms.DockingBehavior.AutoDock)] public class SplitContainer : System.Windows.Forms.ContainerControl
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDispatch)] [System.Runtime.InteropServices.ComVisible(true)] [System.Windows.Forms.Docking(System.Windows.Forms.DockingBehavior.AutoDock)] public class SplitContainer : System.Windows.Forms.ContainerControl, System.ComponentModel.ISupportInitialize
[System.Windows.Forms.Docking(System.Windows.Forms.DockingBehavior.AutoDock)] public class SplitContainer : System.Windows.Forms.ContainerControl, System.ComponentModel.ISupportInitialize
[] [] [] type SplitContainer = class inherit ContainerControl
[] [] [] type SplitContainer = class inherit ContainerControl interface ISupportInitialize
[] type SplitContainer = class inherit ContainerControl interface ISupportInitialize
Public Class SplitContainer Inherits ContainerControl
Public Class SplitContainer Inherits ContainerControl Implements ISupportInitialize
Наследование
SplitContainer
Реализации
Примеры
В следующем примере кода показаны как вертикальные, так и горизонтальные SplitContainer. Вертикальный разделитель перемещается с шагом в 10 пикселей. Левая панель по вертикали SplitContainer содержит TreeView элемент управления, а правая — горизонтальную SplitContainer. Обе горизонтальные SplitContainer панели заполняются ListView элементами управления, а верхняя панель определяется как FixedPanel , чтобы она не изменяла размер при изменении размера контейнера. При перемещении вертикального разбиения вызывается SplitterMoving событие, означаемое в этом примере изменением стиля курсора. Событие SplitterMoved возникает при остановке перемещения разделитировщика. В этом примере это означает, что стиль курсора возвращается к значению по умолчанию.
#using #using #using #using using namespace System; using namespace System::Drawing; using namespace System::Collections; using namespace System::ComponentModel; using namespace System::Windows::Forms; using namespace System::Data; public ref class Form1: public System::Windows::Forms::Form < private: System::Windows::Forms::SplitContainer^ splitContainer1; System::Windows::Forms::TreeView^ treeView1; System::Windows::Forms::SplitContainer^ splitContainer2; System::Windows::Forms::ListView^ listView2; System::Windows::Forms::ListView^ listView1; public: Form1() < InitializeComponent(); >private: void InitializeComponent() < splitContainer1 = gcnew System::Windows::Forms::SplitContainer; treeView1 = gcnew System::Windows::Forms::TreeView; splitContainer2 = gcnew System::Windows::Forms::SplitContainer; listView1 = gcnew System::Windows::Forms::ListView; listView2 = gcnew System::Windows::Forms::ListView; splitContainer1->SuspendLayout(); splitContainer2->SuspendLayout(); SuspendLayout(); // Basic SplitContainer properties. // This is a vertical splitter that moves in 10-pixel increments. // This splitter needs no explicit Orientation property because Vertical is the default. splitContainer1->Dock = System::Windows::Forms::DockStyle::Fill; splitContainer1->ForeColor = System::Drawing::SystemColors::Control; splitContainer1->Location = System::Drawing::Point( 0, 0 ); splitContainer1->Name = "splitContainer1"; // You can drag the splitter no nearer than 30 pixels from the left edge of the container. splitContainer1->Panel1MinSize = 30; // You can drag the splitter no nearer than 20 pixels from the right edge of the container. splitContainer1->Panel2MinSize = 20; splitContainer1->Size = System::Drawing::Size( 292, 273 ); splitContainer1->SplitterDistance = 79; // This splitter moves in 10-pixel increments. splitContainer1->SplitterIncrement = 10; splitContainer1->SplitterWidth = 6; // splitContainer1 is the first control in the tab order. splitContainer1->TabIndex = 0; splitContainer1->Text = "splitContainer1"; // When the splitter moves, the cursor changes shape. splitContainer1->SplitterMoved += gcnew System::Windows::Forms::SplitterEventHandler( this, &Form1::splitContainer1_SplitterMoved ); splitContainer1->SplitterMoving += gcnew System::Windows::Forms::SplitterCancelEventHandler( this, &Form1::splitContainer1_SplitterMoving ); // Add a TreeView control to the left panel. splitContainer1->Panel1->BackColor = System::Drawing::SystemColors::Control; // Add a TreeView control to Panel1. splitContainer1->Panel1->Controls->Add( treeView1 ); splitContainer1->Panel1->Name = "splitterPanel1"; // Controls placed on Panel1 support right-to-left fonts. splitContainer1->Panel1->RightToLeft = System::Windows::Forms::RightToLeft::Yes; // Add a SplitContainer to the right panel. splitContainer1->Panel2->Controls->Add( splitContainer2 ); splitContainer1->Panel2->Name = "splitterPanel2"; // This TreeView control is in Panel1 of splitContainer1. treeView1->Dock = System::Windows::Forms::DockStyle::Fill; treeView1->ForeColor = System::Drawing::SystemColors::InfoText; treeView1->ImageIndex = -1; treeView1->Location = System::Drawing::Point( 0, 0 ); treeView1->Name = "treeView1"; treeView1->SelectedImageIndex = -1; treeView1->Size = System::Drawing::Size( 79, 273 ); // treeView1 is the second control in the tab order. treeView1->TabIndex = 1; // Basic SplitContainer properties. // This is a horizontal splitter whose top and bottom panels are ListView controls. The top panel is fixed. splitContainer2->Dock = System::Windows::Forms::DockStyle::Fill; // The top panel remains the same size when the form is resized. splitContainer2->FixedPanel = System::Windows::Forms::FixedPanel::Panel1; splitContainer2->Location = System::Drawing::Point( 0, 0 ); splitContainer2->Name = "splitContainer2"; // Create the horizontal splitter. splitContainer2->Orientation = System::Windows::Forms::Orientation::Horizontal; splitContainer2->Size = System::Drawing::Size( 207, 273 ); splitContainer2->SplitterDistance = 125; splitContainer2->SplitterWidth = 6; // splitContainer2 is the third control in the tab order. splitContainer2->TabIndex = 2; splitContainer2->Text = "splitContainer2"; // This splitter panel contains the top ListView control. splitContainer2->Panel1->Controls->Add( listView1 ); splitContainer2->Panel1->Name = "splitterPanel3"; // This splitter panel contains the bottom ListView control. splitContainer2->Panel2->Controls->Add( listView2 ); splitContainer2->Panel2->Name = "splitterPanel4"; // This ListView control is in the top panel of splitContainer2. listView1->Dock = System::Windows::Forms::DockStyle::Fill; listView1->Location = System::Drawing::Point( 0, 0 ); listView1->Name = "listView1"; listView1->Size = System::Drawing::Size( 207, 125 ); // listView1 is the fourth control in the tab order. listView1->TabIndex = 3; // This ListView control is in the bottom panel of splitContainer2. listView2->Dock = System::Windows::Forms::DockStyle::Fill; listView2->Location = System::Drawing::Point( 0, 0 ); listView2->Name = "listView2"; listView2->Size = System::Drawing::Size( 207, 142 ); // listView2 is the fifth control in the tab order. listView2->TabIndex = 4; // These are basic properties of the form. ClientSize = System::Drawing::Size( 292, 273 ); Controls->Add( splitContainer1 ); Name = "Form1"; Text = "Form1"; splitContainer1->ResumeLayout( false ); splitContainer2->ResumeLayout( false ); ResumeLayout( false ); > void splitContainer1_SplitterMoving( System::Object^ /*sender*/, System::Windows::Forms::SplitterCancelEventArgs ^ /*e*/ ) < // As the splitter moves, change the cursor type. ::Cursor::Current = System::Windows::Forms::Cursors::NoMoveVert; >void splitContainer1_SplitterMoved( System::Object^ /*sender*/, System::Windows::Forms::SplitterEventArgs^ /*e*/ ) < // When the splitter stops moving, change the cursor back to the default. ::Cursor::Current = System::Windows::Forms::Cursors::Default; >>; [STAThread] int main()
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; public class Form1 : System.Windows.Forms.Form < private System.Windows.Forms.SplitContainer splitContainer1; private System.Windows.Forms.TreeView treeView1; private System.Windows.Forms.SplitContainer splitContainer2; private System.Windows.Forms.ListView listView2; private System.Windows.Forms.ListView listView1; public Form1() < InitializeComponent(); >private void InitializeComponent() < splitContainer1 = new System.Windows.Forms.SplitContainer(); treeView1 = new System.Windows.Forms.TreeView(); splitContainer2 = new System.Windows.Forms.SplitContainer(); listView1 = new System.Windows.Forms.ListView(); listView2 = new System.Windows.Forms.ListView(); splitContainer1.SuspendLayout(); splitContainer2.SuspendLayout(); SuspendLayout(); // Basic SplitContainer properties. // This is a vertical splitter that moves in 10-pixel increments. // This splitter needs no explicit Orientation property because Vertical is the default. splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; splitContainer1.ForeColor = System.Drawing.SystemColors.Control; splitContainer1.Location = new System.Drawing.Point(0, 0); splitContainer1.Name = "splitContainer1"; // You can drag the splitter no nearer than 30 pixels from the left edge of the container. splitContainer1.Panel1MinSize = 30; // You can drag the splitter no nearer than 20 pixels from the right edge of the container. splitContainer1.Panel2MinSize = 20; splitContainer1.Size = new System.Drawing.Size(292, 273); splitContainer1.SplitterDistance = 79; // This splitter moves in 10-pixel increments. splitContainer1.SplitterIncrement = 10; splitContainer1.SplitterWidth = 6; // splitContainer1 is the first control in the tab order. splitContainer1.TabIndex = 0; splitContainer1.Text = "splitContainer1"; // When the splitter moves, the cursor changes shape. splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(splitContainer1_SplitterMoved); splitContainer1.SplitterMoving += new System.Windows.Forms.SplitterCancelEventHandler(splitContainer1_SplitterMoving); // Add a TreeView control to the left panel. splitContainer1.Panel1.BackColor = System.Drawing.SystemColors.Control; // Add a TreeView control to Panel1. splitContainer1.Panel1.Controls.Add(treeView1); splitContainer1.Panel1.Name = "splitterPanel1"; // Controls placed on Panel1 support right-to-left fonts. splitContainer1.Panel1.RightToLeft = System.Windows.Forms.RightToLeft.Yes; // Add a SplitContainer to the right panel. splitContainer1.Panel2.Controls.Add(splitContainer2); splitContainer1.Panel2.Name = "splitterPanel2"; // This TreeView control is in Panel1 of splitContainer1. treeView1.Dock = System.Windows.Forms.DockStyle.Fill; treeView1.ForeColor = System.Drawing.SystemColors.InfoText; treeView1.ImageIndex = -1; treeView1.Location = new System.Drawing.Point(0, 0); treeView1.Name = "treeView1"; treeView1.SelectedImageIndex = -1; treeView1.Size = new System.Drawing.Size(79, 273); // treeView1 is the second control in the tab order. treeView1.TabIndex = 1; // Basic SplitContainer properties. // This is a horizontal splitter whose top and bottom panels are ListView controls. The top panel is fixed. splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; // The top panel remains the same size when the form is resized. splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; splitContainer2.Location = new System.Drawing.Point(0, 0); splitContainer2.Name = "splitContainer2"; // Create the horizontal splitter. splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; splitContainer2.Size = new System.Drawing.Size(207, 273); splitContainer2.SplitterDistance = 125; splitContainer2.SplitterWidth = 6; // splitContainer2 is the third control in the tab order. splitContainer2.TabIndex = 2; splitContainer2.Text = "splitContainer2"; // This splitter panel contains the top ListView control. splitContainer2.Panel1.Controls.Add(listView1); splitContainer2.Panel1.Name = "splitterPanel3"; // This splitter panel contains the bottom ListView control. splitContainer2.Panel2.Controls.Add(listView2); splitContainer2.Panel2.Name = "splitterPanel4"; // This ListView control is in the top panel of splitContainer2. listView1.Dock = System.Windows.Forms.DockStyle.Fill; listView1.Location = new System.Drawing.Point(0, 0); listView1.Name = "listView1"; listView1.Size = new System.Drawing.Size(207, 125); // listView1 is the fourth control in the tab order. listView1.TabIndex = 3; // This ListView control is in the bottom panel of splitContainer2. listView2.Dock = System.Windows.Forms.DockStyle.Fill; listView2.Location = new System.Drawing.Point(0, 0); listView2.Name = "listView2"; listView2.Size = new System.Drawing.Size(207, 142); // listView2 is the fifth control in the tab order. listView2.TabIndex = 4; // These are basic properties of the form. ClientSize = new System.Drawing.Size(292, 273); Controls.Add(splitContainer1); Name = "Form1"; Text = "Form1"; splitContainer1.ResumeLayout(false); splitContainer2.ResumeLayout(false); ResumeLayout(false); >[STAThread] static void Main() < Application.Run(new Form1()); >private void splitContainer1_SplitterMoving(System.Object sender, System.Windows.Forms.SplitterCancelEventArgs e) < // As the splitter moves, change the cursor type. Cursor.Current = System.Windows.Forms.Cursors.NoMoveVert; >private void splitContainer1_SplitterMoved(System.Object sender, System.Windows.Forms.SplitterEventArgs e) < // When the splitter stops moving, change the cursor back to the default. Cursor.Current=System.Windows.Forms.Cursors.Default; >>
' Compile this example using the following command line: ' vbc basicsplitcontainer.vb /r:System.Drawing.dll /r:System.Windows.Forms.dll /r:System.dll /r:System.Data.dll Imports System.Drawing Imports System.Collections Imports System.ComponentModel Imports System.Windows.Forms Imports System.Data Public Class Form1 Inherits System.Windows.Forms.Form Private WithEvents splitContainer1 As System.Windows.Forms.SplitContainer Private treeView1 As System.Windows.Forms.TreeView Private splitContainer2 As System.Windows.Forms.SplitContainer Private listView2 As System.Windows.Forms.ListView Private listView1 As System.Windows.Forms.ListView Public Sub New() InitializeComponent() End Sub Private Sub InitializeComponent() splitContainer1 = New System.Windows.Forms.SplitContainer() treeView1 = New System.Windows.Forms.TreeView() splitContainer2 = New System.Windows.Forms.SplitContainer() listView1 = New System.Windows.Forms.ListView() listView2 = New System.Windows.Forms.ListView() splitContainer1.SuspendLayout() splitContainer2.SuspendLayout() SuspendLayout() ' Basic SplitContainer properties. ' This is a vertical splitter that moves in 10-pixel increments. ' This splitter needs no explicit Orientation property because Vertical is the default. splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill splitContainer1.ForeColor = System.Drawing.SystemColors.Control splitContainer1.Location = New System.Drawing.Point(0, 0) splitContainer1.Name = "splitContainer1" ' You can drag the splitter no nearer than 30 pixels from the left edge of the container. splitContainer1.Panel1MinSize = 30 ' You can drag the splitter no nearer than 20 pixels from the right edge of the container. splitContainer1.Panel2MinSize = 20 splitContainer1.Size = New System.Drawing.Size(292, 273) splitContainer1.SplitterDistance = 79 ' This splitter moves in 10-pixel increments. splitContainer1.SplitterIncrement = 10 splitContainer1.SplitterWidth = 6 ' splitContainer1 is the first control in the tab order. splitContainer1.TabIndex = 0 splitContainer1.Text = "splitContainer1" ' Add a TreeView control to the left panel. splitContainer1.Panel1.BackColor = System.Drawing.SystemColors.Control ' Add a TreeView control to Panel1. splitContainer1.Panel1.Controls.Add(treeView1) splitContainer1.Panel1.Name = "splitterPanel1" ' Controls placed on Panel1 support right-to-left fonts. splitContainer1.Panel1.RightToLeft = System.Windows.Forms.RightToLeft.Yes ' Add a SplitContainer to the right panel. splitContainer1.Panel2.Controls.Add(splitContainer2) splitContainer1.Panel2.Name = "splitterPanel2" ' This TreeView control is in Panel1 of splitContainer1. treeView1.Dock = System.Windows.Forms.DockStyle.Fill treeView1.ForeColor = System.Drawing.SystemColors.InfoText treeView1.ImageIndex = - 1 treeView1.Location = New System.Drawing.Point(0, 0) treeView1.Name = "treeView1" treeView1.SelectedImageIndex = - 1 treeView1.Size = New System.Drawing.Size(79, 273) ' treeView1 is the second control in the tab order. treeView1.TabIndex = 1 ' Basic SplitContainer properties. ' This is a horizontal splitter whose top and bottom panels are ListView controls. The top panel is fixed. splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill ' The top panel remains the same size when the form is resized. splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1 splitContainer2.Location = New System.Drawing.Point(0, 0) splitContainer2.Name = "splitContainer2" ' Create the horizontal splitter. splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal splitContainer2.Size = New System.Drawing.Size(207, 273) splitContainer2.SplitterDistance = 125 splitContainer2.SplitterWidth = 6 ' splitContainer2 is the third control in the tab order. splitContainer2.TabIndex = 2 splitContainer2.Text = "splitContainer2" ' This splitter panel contains the top ListView control. splitContainer2.Panel1.Controls.Add(listView1) splitContainer2.Panel1.Name = "splitterPanel3" ' This splitter panel contains the bottom ListView control. splitContainer2.Panel2.Controls.Add(listView2) splitContainer2.Panel2.Name = "splitterPanel4" ' This ListView control is in the top panel of splitContainer2. listView1.Dock = System.Windows.Forms.DockStyle.Fill listView1.Location = New System.Drawing.Point(0, 0) listView1.Name = "listView1" listView1.Size = New System.Drawing.Size(207, 125) ' listView1 is the fourth control in the tab order. listView1.TabIndex = 3 ' This ListView control is in the bottom panel of splitContainer2. listView2.Dock = System.Windows.Forms.DockStyle.Fill listView2.Location = New System.Drawing.Point(0, 0) listView2.Name = "listView2" listView2.Size = New System.Drawing.Size(207, 142) ' listView2 is the fifth control in the tab order. listView2.TabIndex = 4 ' These are basic properties of the form. ClientSize = New System.Drawing.Size(292, 273) Controls.Add(splitContainer1) Name = "Form1" Text = "Form1" splitContainer1.ResumeLayout(False) splitContainer2.ResumeLayout(False) ResumeLayout(False) End Sub _ Shared Sub Main() Application.Run(New Form1()) End Sub Private Sub splitContainer1_SplitterMoving(sender As System.Object, e As System.Windows.Forms.SplitterCancelEventArgs) Handles splitContainer1.SplitterMoving ' As the splitter moves, change the cursor type. Cursor.Current = System.Windows.Forms.Cursors.NoMoveVert End Sub Private Sub splitContainer1_SplitterMoved(sender As System.Object, e As System.Windows.Forms.SplitterEventArgs) Handles splitContainer1.SplitterMoved ' When the splitter stops moving, change the cursor back to the default. Cursor.Current = System.Windows.Forms.Cursors.Default End Sub End Class
Комментарии
Вы можете добавить элементы управления на две изменяемые панели, а также другие SplitContainer элементы управления на существующие SplitContainer панели, чтобы создать множество областей отображения с возможностью изменения размера.
Используйте элемент управления , SplitContainer чтобы разделить область отображения контейнера (например Form, ) и разрешить пользователю изменять размер элементов управления, добавленных на SplitContainer панели. Когда пользователь передает указатель мыши на разделитель, курсор меняется, указывая, что элементы управления внутри SplitContainer элемента управления могут быть изменены.
Предыдущие версии платформа .NET Framework поддерживают только элемент Splitter управления .
SplitContainer также упрощает размещение элементов управления во время разработки. Например, чтобы создать окно, аналогичное Windows Обозреватель, добавьте SplitContainer элемент управления в Form и задайте для его Dock свойства значение DockStyle.Fill . TreeView Добавьте элемент управления в и Form задайте для его Dock свойства значение DockStyle.Fill . Чтобы завершить макет, добавьте ListView элемент управления и присвойте его Dock свойству DockStyle.Fill значение , чтобы ListView объект занимал оставшееся пространство в Form. Во время выполнения пользователь может изменить размер ширины обоих элементов управления с помощью разделищающего модуля. Используйте свойство , FixedPanel чтобы указать, что размер элемента управления не следует изменять вместе с или другим контейнером Form .
Используйте , SplitterDistance чтобы указать, где начинается разделитель в форме. Используйте , SplitterIncrement чтобы указать, сколько пикселей перемещается разделитель за раз. Значение по умолчанию для SplitterIncrement — один пиксель.
Используйте Panel1MinSize и Panel2MinSize , чтобы указать, как закрыть разделитель можно переместить на внешний SplitContainer край панели. Минимальный размер панели по умолчанию составляет 25 пикселей.
Используйте свойство , Orientation чтобы указать горизонтальную ориентацию. Ориентация SplitContainer по умолчанию — вертикальная.
Используйте свойство , BorderStyle чтобы указать стиль SplitContainer границы и согласовать его стиль границы со стилем границы элементов управления, добавляемых в SplitContainer.
Конструкторы
Инициализирует новый экземпляр класса SplitContainer.
Поля
Определяет значение свойства AutoScroll.
Определяет, включил ли пользователь перетаскивание всего окна.
Определяет, установлено ли для свойства HScroll значение true .
Определяет, выполнял ли пользователь прокрутку в элементе управления ScrollableControl.
Определяет, установлено ли для свойства VScroll значение true .
Свойства
Получает объект AccessibleObject, назначенный элементу управления.
Возвращает или задает описание выполняемого по умолчанию действия элемента управления для использования клиентскими приложениями со специальными возможностями.
Возвращает или задает описание элемента управления, используемого клиентскими приложениями со специальными возможностями.
Возвращает или задает имя элемента управления, используемого клиентскими приложениями со специальными возможностями.
Возвращает или задает доступную роль элемента управления.
Возвращает или задает активный элемент управления в контейнере.
Возвращает или задает значение, указывающее, может ли элемент управления принимать данные, перетаскиваемые в него пользователем.
Возвращает или задает границы контейнера, с которым связан элемент управления, и определяет способ изменения размеров элемента управления при изменении размеров его родительского элемента.
Возвращает или задает размеры, заданные для этого элемента управления при разработке.
Получает коэффициент масштабирования между текущими измерениями и автоматически масштабируемыми измерениями во время проектирования.
Возвращает или задает режим автоматического масштабирования элемента управления.
При переопределении в производном классе Возвращает или задает значение, указывающее, появляются ли полосы прокрутки, когда элементы управления помещаются вне клиентской области объекта SplitContainer. Данное свойство не применимо к этому классу.
Возвращает или задает размер поля автоматической прокрутки. Данное свойство не применимо к этому классу. Данное свойство не применимо к этому классу.
Возвращает или задает минимальный размер полосы прокрутки. Данное свойство не применимо к этому классу.
Данное свойство не применимо к этому классу.
Данное свойство не применимо к этому классу.
Возвращает или задает значение, показывающее, изменяется ли автоматически размер объекта SplitContainer для отображения всего содержимого. Данное свойство не применимо к этому классу.
Возвращает или задает значение, указывающее, будут ли элементы управления в этом контейнере автоматически проверены при изменении фокуса.
Возвращает или задает цвет фона для элемента управления.
Возвращает или задает фоновое изображение, отображаемое на элементе управления.
Данное свойство не применимо к этому классу.
Возвращает или задает BindingContext для объекта SplitContainer.
Возвращает или задает стиль границы для объекта SplitContainer.
Возвращает расстояние в пикселях между нижней границей элемента управления и верхней границей клиентской области контейнера.
Возвращает или задает размер и местоположение (в пикселях) элемента управления, включая его неклиентские элементы, относительно его родительского элемента управления.
Получает значение, указывающее, можно ли для свойства ImeMode установить активное значение с целью включения поддержки IME.
Возвращает значение, указывающее, может ли элемент управления получать фокус.
Определяет, могут ли вызываться события в элементе управления.
Возвращает значение, указывающее, доступен ли элемент управления для выбора.
Возвращает или задает значение, указывающее, была ли мышь захвачена элементом управления.
Возвращает или задает значение, указывающее, вызывает ли элемент управления выполнение проверки для всех элементов управления, требующих проверки, при получении фокуса.
Возвращает прямоугольник, представляющий клиентскую область элемента управления.
Возвращает или задает высоту и ширину клиентской области элемента управления.
Возвращает название организации или имя создателя приложения, содержащего элемент управления.
Возвращает объект IContainer, который содержит коллекцию Component.
Возвращает значение, указывающее, имеет ли элемент управления или один из его дочерних элементов фокус ввода в настоящий момент.
Возвращает или задает контекстное меню, связанное с элементом управления.
Возвращает или задает объект ContextMenuStrip, сопоставленный с этим элементом управления.
Получает коллекцию дочерних элементов управления. Данное свойство не применимо к этому классу.
Возвращает значение, указывающее, был ли создан элемент управления.
Возвращает параметры, необходимые для создания дескриптора элемента управления.
Возвращает текущие измерения экрана во время выполнения.
Возвращает или задает курсор, отображаемый, когда указатель мыши находится на элементе управления.
Возвращает привязки данных для элемента управления.
Возвращает или задает контекст данных для привязки данных. Это свойство окружения.
Возвращает или задает курсор по умолчанию для элемента управления.
Возвращает стандартный режим редактора методов ввода, поддерживаемый данным элементом управления.
Возвращает размер пустого пространства в пикселях между элементами управления, которое определено по умолчанию.
Возвращает длину и высоту в пикселях, которые были указаны в качестве максимального размера элемента управления.
Возвращает длину и высоту в пикселях, которые были указаны в качестве минимального размера элемента управления.
Возвращает внутренние промежутки в содержимом элемента управления в пикселях.
Возвращает размер по умолчанию для объекта SplitContainer.
Возвращает значение, указывающее, находится ли данный компонент Component в режиме конструктора в настоящее время.
Получает значение DPI для устройства, на котором сейчас отображается элемент управления.
Получает прямоугольник, представляющий виртуальную отображаемую область элемента управления.
Получает значение, указывающее, находится ли базовый класс Control в процессе удаления.
Возвращает или задает границы объекта SplitContainer, прикрепляемые к краям контейнера.
Получает параметры заполнения прикрепления для всех краев элемента управления.
Возвращает или задает значение, указывающее, должна ли поверхность этого элемента управления перерисовываться с помощью дополнительного буфера, чтобы уменьшить или предотвратить мерцание.
Возвращает или задает значение, указывающее, может ли элемент управления отвечать на действия пользователя.
Возвращает список обработчиков событий, которые прикреплены к этому объекту Component.
Возвращает или задает панель SplitContainer, которая сохраняет свои размеры при изменении размеров контейнера.
Возвращает значение, указывающее, имеется ли на элементе управления фокус ввода.
Возвращает или задает шрифт текста, отображаемого элементом управления.
Возвращает или задает высоту шрифта элемента управления.
Возвращает или задает цвет элемента управления.
Возвращает дескриптор окна, с которым связан элемент управления.
Возвращает значение, указывающее, содержит ли элемент управления один или несколько дочерних элементов.
Возвращает или задает высоту элемента управления.
Получает характеристики, связанные с горизонтальной полосой прокрутки.
Получает или задает значение, показывающее, отображается ли горизонтальная полоса прокрутки.
Возвращает или задает режим редактора метода ввода элемента управления.
Получает или задает режим IME элемента управления.
Возвращает значение, указывающее, следует ли вызывающему оператору обращаться к методу invoke во время вызовов метода из элемента управления, так как вызывающий оператор находится не в том потоке, в котором был создан элемент управления.
Возвращает или задает значение, указывающее, является ли элемент управления видимым для приложений со специальными возможностями.
Указывает, находится ли один из предков этого элемента управления в режиме DesignMode. Это свойство доступно только для чтения.
Возвращает значение, указывающее, был ли удален элемент управления.
Возвращает значение, указывающее, имеется ли у элемента управления связанный с ним дескриптор.
Возвращает значение, указывающее, отображается ли зеркально элемент управления.
Возвращает или задает значение, указывающее, является ли разделитель стационарным или подвижным.
Получает кэшированный экземпляр механизма размещения элемента управления.
Возвращает или задает расстояние в пикселях между левой границей элемента управления и левой границей клиентской области его контейнера.
Возвращает или задает координаты левого верхнего угла элемента управления относительно левого верхнего угла его контейнера.
Возвращает или задает расстояние между элементами управления.
Возвращает или задает размер, являющийся верхней границей, которую может указать метод GetPreferredSize(Size).
Возвращает или задает размер, являющийся нижней границей, которую может указать метод GetPreferredSize(Size).
Возвращает или задает имя элемента управления.
Возвращает или задает значение, указывающее ориентацию (горизонтальную или вертикальную) панелей SplitContainer.
Возвращает или задает внутренний зазор (в пикселях) между краями объекта SplitterPanel и его содержимым. Данное свойство не применимо к этому классу.
Получает левую или верхнюю панель объекта SplitContainer в зависимости от значения Orientation.
Возвращает или задает значение, определяющее, свернута панель Panel1 или развернута.
Возвращает или задает минимальное расстояние (в пикселях) разделителя от левого или верхнего края панели Panel1.
Получает правую или нижнюю панель объекта SplitContainer в зависимости от значения Orientation.
Возвращает или задает значение, определяющее, свернута панель Panel2 или развернута.
Возвращает или задает минимальное расстояние (в пикселях) разделителя от правого или нижнего края панели Panel2.
Возвращает или задает родительский контейнер элемента управления.
Возвращает форму, которой назначен данный элемент управления типа «контейнер».
Возвращает размер прямоугольной области, в которую может поместиться элемент управления.
Возвращает имя продукта сборки, содержащей элемент управления.
Возвращает версию сборки, содержащую элемент управления.
Возвращает значение, указывающее, осуществляет ли в настоящий момент элемент управления повторное создание дескриптора.
Возвращает или задает область окна, связанную с элементом управления.
Является устаревшей.
Является устаревшей.
Это свойство устарело.
Возвращает или задает значение, указывающее, перерисовывается ли элемент управления при изменении размеров.
Возвращает расстояние в пикселях между правой границей элемента управления и левой границей клиентской области его контейнера.
Возвращает или задает значение, указывающее, выровнены ли компоненты элемента управления для поддержки языков, использующих шрифты с написанием справа налево.
Получает значение, определяющее масштабирование дочерних элементов управления.
Возвращает значение, указывающее, должен ли элемент управления отображать прямоугольники фокуса.
Возвращает значение, указывающее, имеет ли пользовательский интерфейс соответствующее состояние, при котором отображаются или скрываются сочетания клавиш.
Возвращает или задает местонахождение элемента управления.
Возвращает или задает высоту и ширину элемента управления.
Возвращает или задает местоположение разделителя (в пикселях) от левого или верхнего края объекта SplitContainer.
Возвращает или задает значение, представляющее шаг перемещения разделителя, выраженный в пикселях.
Получает размер и местоположение разделителя относительно объекта SplitContainer.
Возвращает или задает ширину разделителя в пикселях.
Возвращает или задает последовательность перехода по клавише TAB между элементами управления внутри контейнера.
Возвращает или задает значение, указывающее, можно ли передать фокус разделителю при помощи клавиши TAB.
Возвращает или задает объект, содержащий данные об элементе управления.
Данное свойство не применимо к этому классу.
Возвращает или задает расстояние в пикселях между верхней границей элемента управления и верхней границей клиентской области его контейнера.
Получает родительский элемент управления, не имеющий другого родительского элемента управления Windows Forms. Как правило, им является внешний объект Form, в котором содержится элемент управления.
Возвращает или задает значение, указывающее, следует ли использовать курсор ожидания для текущего элемента управления и всех дочерних элементов управления.
Получает характеристики, связанные с вертикальной полосой прокрутки.
Возвращает или задает значение, указывающее, отображаются ли элемент управления и все его дочерние элементы управления.
Получает или задает значение, показывающее, отображается ли вертикальная полоса прокрутки.
Возвращает или задает ширину элемента управления.
Данное свойство не применимо к этому классу.
Методы
Уведомляет клиентские приложения со специальными возможностями об указанном перечислении AccessibleEvents для указанного дочернего элемента управления.
Уведомляет клиентские приложения со специальными возможностями об указанном перечислении AccessibleEvents для указанного дочернего элемента управления.
Настраивает полосы прокрутки в контейнере на основе текущей позиции элемента управления и выбранного в данный момент элемента управления.
Подает объекту сигнал о начале инициализации.
Выполняет указанный делегат асинхронно в потоке, в котором был создан базовый дескриптор элемента управления.
Выполняет указанный делегат асинхронно в потоке, в котором был создан базовый дескриптор элемента управления.
Выполняет указанный делегат асинхронно с указанными аргументами в потоке, в котором был создан базовый дескриптор элемента управления.
Помещает элемент управления в начало z-порядка.
Возвращает значение, указывающее, является ли указанный элемент управления дочерним элементом.
Представляет элемент управления, состоящий из подвижной строки, которая разделяет область отображения контейнера на две панели с изменяемыми размерами.
Создает для элемента управления новый объект с поддержкой специальных возможностей.
Вызывает принудительное создание видимого элемента управления, включая создание дескриптора и всех видимых дочерних элементов.
Создает новый экземпляр коллекции элементов управления для данного элемента управления.
Создает объект Graphics для элемента управления.
Создает дескриптор для элемента управления.
Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.
Отправляет заданное сообщение процедуре окна, используемой по умолчанию.
Удаляет дескриптор, связанный с элементом управления.
Освобождает все ресурсы, занятые модулем Component.
Освобождает неуправляемые ресурсы, используемые объектом Control и его дочерними элементами управления (при необходимости освобождает и управляемые ресурсы).
Начинает операцию перетаскивания.
Начинает операцию перетаскивания.
Поддерживает отрисовку в указанном точечном рисунке.
Подает объекту сигнал о завершении инициализации.
Получает возвращаемое значение асинхронной операции, представленное переданным объектом IAsyncResult.
Определяет, равен ли указанный объект текущему объекту.
Возвращает форму, в которой находится элемент управления.
Устанавливает фокус ввода на элемент управления.
Получает указанный объект AccessibleObject.
Получает значение, указывающее, как будет вести себя элемент управления, когда его свойство AutoSize включено.
Возвращает дочерний элемент управления, имеющий указанные координаты.
Возвращает дочерний элемент управления, расположенный по указанным координатам, определяя, следует ли игнорировать дочерние элементы управления конкретного типа.
Возвращает следующий объект ContainerControl в цепочке родительских элементов управления данного элемента.
Служит хэш-функцией по умолчанию.
Является устаревшей.
Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.
Возвращает следующий или предыдущий элемент среди дочерних элементов управления в последовательности клавиши TAB.
Вычисляет размер прямоугольной области, в которую помещается элемент управления.
Возвращает границы, внутри которых масштабируется элемент управления.
Определяет, установлен ли указанный флаг.
Возвращает объект, представляющий службу, предоставляемую классом Component или классом Container.
Возвращает значение указанного бита стиля элемента управления для данного элемента управления.
Определяет, находится ли элемент управления на верхнем уровне.
Возвращает объект Type для текущего экземпляра.
Скрывает элемент управления от пользователя.
Является устаревшей.
Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.
Вызывается после добавления элемента управления в другой контейнер.
Делает недействительной всю поверхность элемента управления и вызывает его перерисовку.
Делает недействительной конкретную область элемента управления и вызывает отправку сообщения рисования элементу управления. При необходимости объявляет недействительными назначенные элементу управления дочерние элементы.
Делает недействительной указанную область элемента управления (добавляет ее к области обновления элемента, которая будет перерисована при следующей операции рисования) и вызывает отправку сообщения рисования элементу управления.
Делает недействительной указанную область элемента управления (добавляет ее к области обновления элемента, которая будет перерисована при следующей операции рисования) и вызывает отправку сообщения рисования элементу управления. При необходимости объявляет недействительными назначенные элементу управления дочерние элементы.
Делает недействительной указанную область элемента управления (добавляет ее к области обновления элемента, которая будет перерисована при следующей операции рисования) и вызывает отправку сообщения рисования элементу управления.
Делает недействительной указанную область элемента управления (добавляет ее к области обновления элемента, которая будет перерисована при следующей операции рисования) и вызывает отправку сообщения рисования элементу управления. При необходимости объявляет недействительными назначенные элементу управления дочерние элементы.
Выполняет указанный делегат в том потоке, которому принадлежит базовый дескриптор окна элемента управления.
Выполняет указанный делегат в том потоке, которому принадлежит базовый дескриптор окна элемента управления.
Выполняет указанный делегат в том потоке, которому принадлежит основной дескриптор окна элемента управления, с указанным списком аргументов.
Выполняет указанный делегат в том потоке, которому принадлежит базовый дескриптор окна элемента управления.
Вызывает событие GotFocus для указанного элемента управления.
Вызывает событие LostFocus для указанного элемента управления.
Вызывает событие Click для указанного элемента управления.
Вызывает событие Paint для указанного элемента управления.
Вызывает событие PaintBackground для указанного элемента управления.
Определяет, является ли символ входным символом, который распознается элементом управления.
Определяет, является ли заданная клавиша обычной клавишей ввода или специальной клавишей, нуждающейся в предварительной обработке.
Преобразует логическое значение DPI в эквивалентное значение DPI DeviceUnit.
Преобразует размер из логических единиц в единицы устройства путем его масштабирования к текущему DPI и округлением вниз до ближайшего целого значения ширины и высоты.
Создает неполную копию текущего объекта Object.
Создает неполную копию текущего объекта MarshalByRefObject.
Вызывает событие Invalidated, чтобы сделать недействительной указанную область элемента управления.
C-sharp / Основы Windows Forms C# (изучаем основные формы)
1074 Часть V. Презентации ставлении. В данном случае мы добавляем два столбца — Country (Страна) и Currency (Валюта). Порядок следования столбцов следующий: сначала идет Text элемента типа ListViewItem , затем каждый из элементов коллекции ListViewItem.SubItem — в том порядке, как они появляются в коллекции. Столбцы можно добавлять путем создания объекта ColumnHeader и установки его свойства Text , а также необязательных свойств Width и Alignment . После создания объекта ColumnHeader его можно добавить к свойству Columns . Другой способ добавления столбцов предполагает использование переопределения метода Columns.Add . Он позволяет передать ему сразу значения Text , Width и Alignment нового столбца. Вот пример: lvCountries.Columns.Add(«Country», 100, HorizontalAlignment.Left); lvCountries.Columns.Add(«Currency», 100, HorizontalAlignment.Left); Если свойство AllowColumnReorder установлено в true , пользователь имеет возможность перетаскивать заголовки столбцов с места на место, изменяя их последовательность. Свойство CheckBoxes элемента ListView показывает флажки рядом с элементами списка в ListView . Это дает возможность пользователю легко выбирать множество элементов в элементе управления ListView . Проверить, какие элементы отмечены, можно в коллекции CheckedItems . Свойство Alingment устанавливает выравнивание пиктограмм в представлениях списка с большими и малыми пиктограммами. Значение может быть любым из перечисления ListViewAlignment , а именно: Default , Left , Top и SnapToGrid . Значение Default разрешает пользователю размещать пиктограммы в любых позициях, где он пожелает. При выборе Left или Top элементы выравниваются по левому краю или по верху ListView . При выборе SnapToGrid элементы ListView расставляются в узлах невидимой сетки в элементе управления ListView . Свойство AutoArrange принимает булевское значение, указывающее на необходимость автоматического выравнивания в соответствии с выбранным значением Alignment . PictureBox Элемент управления PictureBox применяется для отображения графических изображений. Изображение может быть в формате BMP, JPEG, GIF, PNG, метафайла или пиктограммы. Свойство SizeMode использует перечисление PictureBoxSizeMode для определения того, как изображение размещается в элементе управления. SizeMode может быть равно AutoSize , CenterImage , Normal или StretchImage . Размер отображения PictureBox можно изменять, устанавливая свойство ClientSize . При создании PictureBox сначала создается объект, базирующийся на Image . Например, чтобы загрузить файл JPEG в PictureBox , нужно поступить следующим образом: Bitmap myJpeg = new Bitmap(«mypic.jpg»); pictureBox1.Image = (Image)myJpeg; Отметим необходимость приведения к типу Image , поскольку свойство Image элемента управления PictureBox имеет этот тип. ProgressBar Элемент управления ProgressBar (индикатор хода работ) используется для визуального представления состояния длительного действия. Он уведомляет пользователя, что нечто происходит, поэтому следует подождать. Для элемента управления ProgressBar устанавливаются значения свойств Minimum и Maximum . Эти свойства со-
Глава 31. Windows Forms 1075 ответствуют положению индикатора хода работ в крайнем левом ( Minimum ) и крайнем правом ( Maximum ) положениях. Свойство Step устанавливает число, на которое увеличивается значение при каждом вызове метода PerformStep . Можно также использовать метод Increment и увеличивать значение на переданную ему величину. Свойство Value возвращает текущее значение ProgressBar . С помощью свойства Text можно информировать пользователя о процентной доле выполнения работы или же о количестве оставшихся до ее завершения позиций. Имеется также свойство BackgroundImage , предназначенное для настройки внешнего вида индикатора выполнения. TextBox , RichTextBox и MaskedTextBox Элемент управления TextBox — один из наиболее часто используемых. TextBox , RichTextBox и MaskedTextBox унаследованы от TextBoxBase . Класс TextBoxBase представляет такие свойства, как MultiLine и Lines . Свойство MultiLine — булевское значение, позволяющее элементу управления TextBox отображать текст в более чем одной строке. При этом каждая строка в текстовом окне является частью массива строк. Этот массив доступен через свойство Lines . Свойство Text возвращает полное содержимое текстового окна в виде одной строки. TextLength — общая длина текста. Свойство MaxLength ограничивает длину текста определенной величиной. SelectedText , SelectionLength и SelectionStart имеют дело с текущим выделенным текстом в текстовом окне. Выделенный текст подсвечивается, когда элемент управления получает фокус. TextBox добавляет множество интересных свойств. AcceptsReturn — булевское значение, позволяющее TextBox воспринимать клавишу
1076 Часть V. Презентации Таблица 31.3. Значения RichTextBoxStreamType
| Значение | Описание | |
| PlainText | Информация, связанная с форматированием, отсутствует. В тех мес- | |
| тах, где находятся OLE-объекты, используются пробелы. | ||
| RichNoOleObjs | Форматирование Rich Text Format, но на месте OLE-объектов нахо- | |
| дятся пробелы. | ||
| RichText | Форматированный текст RTF и OLE-объектами на месте. | |
| TextTextOleObjs | Простой текст с текстом, заменяющим OLE-объекты. | |
| UnicodePlainText | То же, что и | , но в кодировке Unicode. |
| PlainText | ||
Метод SaveFile работает с несколькими параметрами и сохраняет текст из элемента управления в указанном файле. Если файл с таким именем уже существует, он перезаписывается. MaskedTextBox предоставляет возможность ограничить то, что пользователь может ввести, а также позволяет автоматически форматировать введенные данные. Несколько свойств используются для проверки допустимости формата пользовательского ввода. Mask — свойство, содержащее строку маски. Маскирующая строка аналогична строке форматирования. Допустимое количество символов, тип допустимых символов, формат данных — все это устанавливается строкой Mask . Класс, основанный на MaskedTextProvider , также может представлять необходимую информацию для форматирования и проверки. MaskedTextProvider можно устанавливать, только передавая его одному из конструкторов. Три различных свойства возвращают текст MaskedTextProvider . Свойство Text возвращает текст, содержащийся в элементе управления в данный момент. Оно может отличаться в зависимости от того, имеет ли элемент фокус, и от значения свойства HidePromptOnLeave . Приглашение (prompt) — это строка, которую видит пользователь и которая подсказывает ему, что нужно ввести. Свойство InputText всегда возвращает только тот текст, который ввел пользователь. Свойство OutputText возвращает текст, сформатированный на базе свойств IncludeLiterals и IncludePrompt . Если, например, маска предназначена для ввода номера телефона, то строка Mask , по всей видимости, должна включать скобки и несколько тире. Это могут быть литеральные символы, которые включаются в свойство OutputText , если свойству IncludeLiteral было присвоено значение true . В элементе управления MaskedTextBox также присутствует пара дополнительных событий. OutputTextChanged и InputTextChanged возбуждаются, когда изменяются значения InputText или OutputText . Panel Panel — простой элемент управления, содержащий в себе другие элементы управления. За счет группирования вместе элементов управления и помещения их в панель существенно упрощается управление ими. Например, можно сделать недоступными все элементы управления в панели, просто сделав недоступной всю панель. Поскольку Panel наследуется от ScrollableControl , также можно воспользоваться преимуществами AutoScroll . Если в пределах доступной области нужно отобразить слишком много элементов управления, поместите их в панель и установите значение true свойству AutoScroll — после этого их можно будет прокручивать в пределах этой области.
Глава 31. Windows Forms 1077 Панели по умолчанию не отображают рамки, но, присвоив значение свойству BorderStyle , можно визуально группировать взаимосвязанные элементы управления посредством рамок. Это делает пользовательский интерфейс более дружественным. Panel — базовый класс для FlowLayoutPanel , TableLayoutPanel , TabPage и SplitterPanel . Используя эти элементы управления, можно создавать сложные и профессионально выглядящие экранные формы или окна. FlowLayoutPanel и TableLayoutPanel особенно удобны для создания форм с изменяемым размером. FlowLayoutPanel и TableLayoutPanel FlowLayoutPanel и TableLayoutPanel — это новые дополнения к .NET Framework. Как можно предположить по их названиям, эти панели предоставляют возможность компоновки элементов управления с использованием той же парадигмы, что и Web Forms. FlowLayoutPanel — это контейнер, позволяющий содержащимся в нем элементам “плавать” либо в горизонтальном, либо в вертикальном направлении. Вместо “плавания” элементы панели можно закрепить. Направление размещения устанавливается свойством FlowDirection и перечислением FlowDirection . Свойство WrapContents определяет, должны ли элементы управления переходить на следующую строку или столбец, когда размер формы изменяется или когда элементы закрепляются. TableLayoutPanel использует сеточную структуру для управления компоновкой элементов управления. Любой элемент управления Windows Forms может быть вставлен в TableLayoutPanel , включая другую панель TableLayoutPanel . Это позволяет получать очень гибкий и динамичный дизайн окон. Когда элемент управления добавляется в TableLayoutPanel , четыре дополнительных свойства добавляются в категорию Layout окна свойств. Это Column , ColumnSpan , Row и RowSpan . Во многом подобно HTML-таблице на Web-странице, для каждого элемента управления могут быть установлены промежутки между столбцами и строками. По умолчанию элемент управления центрируется в ячейке таблицы, но это можно изменить свойствами Dock и Anchor . Стиль по умолчанию для строк и столбцов может быть изменен с помощью коллекций RowStyles и ColumnsStyles . Эти коллекции содержат, соответственно, объекты RowStyle и ColumnsStyle . Объекты Style имеют общее свойство — SizeType . Это свойство содержит значение типа перечисления SizeType , определяющее то, как должны устанавливаться ширина столбца и высота строки. Значения включают AutoSize , Absolute и Percent . Значение AutoSize разделяет пространство с другими равноправными элементами управления, Absolute позволяет установить количество пикселей размера, а Percent задает размер элемента управления в процентах от размера родительского элемента (панели). Строки, столбцы и дочерние элементы управления могут добавляться и удаляться динамически во время выполнения. Свойство GrowStyle принимает значение из перечисления TableLayoutPanelGrowStyle , которое заставляет таблицу добавлять столбец, строку или сохранять фиксированный размер, когда новый элемент управления добавляется в полную таблицу. Если установлено значение FixedSized , то при попытке добавить элемент возбуждается исключение ArgumentException . Если же в таблице есть пустая ячейка, то элемент управления помещается в нее. Это свойство имеет эффект, только если таблица полна, и в нее добавляется элемент управления. Форма formPanel в примере приложения содержит панели FlowLayoutPanels и TableLayoutPanels , каждая из которых содержит разнообразные эелементы управления. Экспериментируя с элементами управления, особенно со свойствами Dock и Anchor элементов управления, расположенных в панелях компоновки, вам будет легче всего понять принцип их работы.
1078 Часть V. Презентации SplitContainer Элемент управления SplitContainer — это на самом деле три элемента в одном. Он состоит из двух панелей с линейкой или разделителем между ними. Пользователь может перемещать эту линейку, изменяя размеры панелей. При изменении размеров панелей элементы управления, содержащиеся на них, также могут изменять свой размер. Лучшим примером SplitContainer может служить проводник файлов (File Explorer). Левая панель содержит TreeView с папками, а правая — ListView с содержимым этих папок. Когда пользователь перемещает курсор мыши над линейкой разделителя, он изменяет свой вид, говоря о том, что линейку можно перемещать. SplitContainer может содержать любые элементы управления, включая панели с компоновками и другие SplitContainer . Это позволяет создавать очень сложные и развитые формы. Элемент управления Splitter генерирует два события, связанные с перемещением: SplitterMoving и SplitterMoved . Одно происходит во время перемещения линейки, а другое — после завершения движения. Оба принимают аргумент SplitterEventArgs . SplitterEventArgs содержит свойства для координат X и Y левого верхнего угла Splitter ( SplitX и SplitY ), а также координаты X и Y указателя мыши ( X и Y ). TabControl и TabPages TabControl позволяет группировать связанные элементы управления в серии стра- ниц-вкладок. TabControl управляет коллекцией элементов типа TabPages . Несколько свойств управляют внешним видом TabControl . Свойство Appearance использует перечисление TabAppearance для определения внешнего вида вкладок. Допустимыми значениями являются FlatButtons , Buttons и Normal . Свойство Multiline булевского типа указывает на то, что может отображаться более одной строки вкладок. Если свойство Multiline установлено в false , а количество вкладок превышает такое, что не может уместиться на экране, появляется пара кнопок, позволяющая прокручивать вкладки и видеть те, что не уместились. Свойство Text элемента TabPage — это то, что отображается на отдельной вкладке. Свойство Text устанавливается через параметр конструктора. Создав элемент управления TabPage , вы получаете контейнер, куда можно помещать другие элементы управления. Средствами дизайнера Visual Studio .NET легко добавить элемент TabPage к элементу управления TabControl , используя редактор коллекций. При добавлении каждой такой страницы можно установить множество ее свойств, затем перетащить на нее другие дочерние элементы управления. Получить текущую вкладку можно из свойства SelectedTab . Событие SelectedIndex возникает при каждом переключении вкладки. Прослушивая свойство SelectedIndex и затем подтверждая текущий выбор страницы через SelectedTab , вы можете организовать специальную обработку для каждой вкладки. Вы могли бы, к примеру, управлять данными, отображаемыми для каждой вкладки. ToolStrip Элемент управления ToolStrip — это контейнер, используемый для создания панелей инструментов, структур меню и строк состояния. ToolStrip используется непосредственно для панелей инструментов и в качестве базового класса для MenuStrip и StatusStrip . Применяемый в качестве панели инструментов, элемент управления ToolStrip использует набор элементов управления, происходящих от класса ToolStripItem .
Глава 31. Windows Forms 1079 Класс ToolStripItem добавляет общую функциональность отображения и размещения, а также управляет большинством событий, связанных с элементами управления. ToolStripItem унаследован от класса System.ComponentModel.Component , а не от Control . Основанные на ToolStripItem классы должны содержаться в контейнере, происходящем от ToolStrip . Image и Text — возможно, наиболее часто используемые свойства. Графические изображения могут быть установлены либо через свойство Image , либо с использованием элемента управления ImageList и установкой свойства ImageList элемента управления ToolStrip . Затем могут быть установлены свойства ImageIndex индивидуальных элементов управления. Форматирование текста в ToolStripItem управляется свойствами Font , TextAlign и TextDirection . Свойство TextAlign устанавливает выравнивание текста относительно элемента управления. Это может быть любое значение из перечисления ControlAlignment . По умолчанию принимается MiddleRight . Свойство TextDirection задает ориентацию текста. Значения могут быть любыми из перечисления ToolStripTextDirection , а именно — Horizontal , Inherit , Vertical270 и Vertical90 . Vertical270 поворачивает текст на 270 градусов, а Vertical90 — на 90 градусов. Свойство DisplayStyle управляет тем, отображается ли текст, изображение, то и другое или ни то ни другое на поверхности элемента управления. Когда AutoSize установлено в true , ToolStripItem будет изменять свой размер, потому потребуется минимальное пространство. Элементы управления, унаследованные от ToolStripItem , перечислены в табл. 31.4. Таблица 31.4. Элементы управления, унаследованные от ToolStripItem
| Элемент | Описание | ||
| ToolStripButton | Представляет кнопку, доступную для пользовательского выбора. | ||
| ToolStripLabel | Отображает не выбираемый текст или изображения на | . | |
| ToolStrip | |||
| ToolStripSeparator | ToolStripLabel также может отображать одну или более гиперссылок. | ||
| Используется для отделения и группирования других | |||
| ToolStripItems . Элементы могут быть сгруппированы в соответст- | |||
| вии с их функциональностью. | |||
| ToolStripDropDownItem | Отображает выпадающие элементы. Базовый класс для | ||
| ToolStripDropDownButton , ToolStripMenuItem и | |||
| ToolStripControlHost | ToolStripSplitButton . | ||
| Место размещения в ToolStrip других элементов управле- | |||
| ния, не унаследованных от ToolStripItem . Базовый класс для | |||
| ToolStripComboBox , ToolStripProgressBar и ToolStripTextBox . | |||
Два элемента этого списка — ToolStripDropDownItem и ToolStripControlHost — требуют некоторых пояснений. ToolStripDropDownItem — это базовый класс для ToolStripMenuItem , используемого для построения структур меню. Элементы ToolStripMenuItem добавляются к элементам управления MenuStrip . Как упоминалось ранее, MenuStrip унаследован от ToolStrip . Это становится важным, когда приходит время манипулировать или расширять элементы меню. Поскольку панели инструментов и меню унаследованы от одних и тех же классов, создание каркасов для управления и выполнения команд становится намного проще.
1080 Часть V. Презентации ToolStripControlHost может использоваться для размещения в себе элементов управления, чей тип не наследуется от ToolStripItem . Вспомним, что напрямую в ToolStrip могут размещаться только элементы управления, унаследованные от ToolStripItem . В следующем примере показано, как поместить элемент управления DateTimePicker на ToolStrip . public mdiParent() < InitializeComponent(); ToolStripControlHost _dateTimeCtl; dateTimeCtl = new ToolStripControlHost(new DateTimePicker()); ((DateTimePicker)_dateTimeCtl.Control).ValueChanged += delegate < toolStripLabel1.Text = ((DateTimePicker)_dateTimeCtl.Control).Value.Subtract(DateTime.Now).ToString(); >; dateTimeCtl.Width = 200; dateTimeCtl.DisplayStyle = ToolStripItemDisplayStyle.Text; toolStrip1.Items.Add(_dateTimeCtl); > Это конструктор формы frmMain из кода примера. Сначала объявляется и создается экземпляр ToolStripControlHost . Обратите внимание, что когда создается этот экземпляр, элемент управления, который должен быть в нем размещен, передается конструктору. Следующая строка кода устанавливает обработчик события ValueChanged для элемента управления DateTimePicker . Он может быть доступен через свойство Control класса ToolStripHostControl , потому его нужно привести обратно к правильному типу элемента управления. Когда это сделано, можно обращаться к свойствам и методам размещенного внутри ToolStripHostControl элемента управления. Другой способ сделать это, обеспечивающий лучшую инкапсуляцию — создать новый класс, унаследованный от ToolStripControlHost . Приведенный ниже код представляет другую версию включения DateTimePicker в ToolStrip как нового класса ToolStripDateTimePicker . namespace FormsSample.SampleControls < public class DTPickerToolStrip: System.Windows.Forms.ToolStripControlHost < public event EventHandler ValueChanged; public DTPickerToolStrip () : base(new DateTimePicker()) < >public new DateTimePicker Control < get> public DateTime Value < get < return Control.Value; >> protected override void OnSubscribeControlEvents(Control control)
Глава 31. Windows Forms 1081 protected override void OnUnsubscribeControlEvents(Control control) < base.OnSubscribeControlEvents(control); ((DateTimePicker)control).ValueChanged -= new EventHandler(ValueChanged); >private void ValueChangedHandler (object sender, EventArgs e) < if (ValueChanged != null) ValueChanged(this, e); >> > Б о льшая часть того, что делает этот класс — это показ избранных свойств, методов и событий класса DateTimePicker . Таким образом, ссылка на лежащий в основе элемент управления не должна будет поддерживаться приложением-хостом. Процесс показа событий несколько более сложен. Метод OnSubscribeControlEvents применяется для синхронизации событий размещенного элемента управления, в данном случае — DateTimePicker , с классом, происходящим от ToolStripControlHost , которым здесь является ToolStripDateTimePicker . В этом примере событие ValueChanged передается DTPickerToolStrip . Это дает возможность пользователю элемента управления так настроить событие в приложении-хосте, как если бы DTPickerToolStrip был наследником DateTimePicker вместо ToolStripControlHost . Следующий пример кода демонстрирует это. В коде использован DTPickerToolStrip . public mdiParent() < DTPickerToolStrip otherDateTimePicker = new DTPickerToolStrip(); otherDateTimePicker.Width = 200; otherDateTimePicker.ValueChanged += new EventHandler(otherDateTimePicker_ValueChanged); toolStrip1.Items.Add(otherDateTimePicker); >Отметим, что когда устанавливается обработчик события ValueChanged , используется ссылка на класс DTPickerToolStrip вместо DateTimePicker , как в предыдущем примере. Видно, насколько яснее этот код выглядит по сравнению с предыдущим. Мало того, поскольку DateTimePicker помещен в оболочку другого класса, степень инкапсуляции значительно возросла, а DTPickerToolStrip стало гораздо проще использовать в других частях приложения и других проектах. MenuStrip Элемент управления MenuStrip — это контейнер для структур меню в приложении. Как упоминалось ранее, класс MenuStrip унаследован от ToolStrip . Система меню строится добавлением объектов ToolStripMenu к MenuStrip . Это можно сделать в коде или в дизайнере Visual Studio. Для этого нужно перетащить элемент управления MenuStrip на форму в дизайнере, и этот MenuStrip позволит вводить текст меню непосредственно в элементы меню. Элемент управления MenuStrip включает лишь пару дополнительных свойств. GripStyle использует перечисление ToolStripGripStyle для установки видимости. Свойство MdiWindowListItem принимает и возвращает ToolStripMenuItem . Этот ToolStripMenuItem будет представлять меню, которое отображают все открытые окна в MDI-приложении.
1082 Часть V. Презентации ContextMenuStrip Класс ContextMenuStrip применяется для показа контекстного меню, или меню, отображаемого по нажатию правой кнопки мыши. Подобно MenuStrip , ContextMenuStrip является контейнером объектов ToolStripMenuItem . Однако он унаследован от ToolStripDropDownMenu . Элемент ContextMenuStrip создается так же, как MenuStrip . К нему добавляются элементы ToolStripMenuItem и определяются события Click каждого элемента для выполнения специфического действия. Контекстное меню назначается конкретному элементу управления. Это делается установкой свойства ContextMenuStrip элемента управления. Когда пользователь щелкает правой кнопкой мыши в поле элемента управления, отображается упомянутое меню. ToolStripMenuItem ToolStripMenuItem — класс, служащий для построения структур меню. Каждый объект ToolStripMenuItem представляет отдельный пункт в системе меню. Каждый ToolStripMenuItem владеет коллекцией ToolStripItemCollection , поддерживающей дочерние меню. Эта функциональность унаследована от ToolStripDropDownItem . Поскольку ToolStripMenuItem наследуется от ToolStripItem , к нему применимы все те же самые свойства форматирования. Изображения появляются как маленькие пиктограммы справа от текста меню. Элементы меню могут иметь флажки для отметки, находящиеся рядом с ними, определяемые с помощью свойств Checked и CheckState . Каждому пункту меню могут быть назначены горячие клавиши. Обычно это сочетание двух клавиш, как, например, (обычное сокращение для операции копирования). Когда горячая клавиша назначена, она может быть необязательно отображена в меню установкой значения свойства ShowShortCutKey в true . Чтобы быть полезным, пункт меню должен что-то делать, когда пользователь щелкает на нем или нажимает сочетание горячих клавиш. Чаще всего для этого следует обработать событие Click . Если используется свойство Checked , то события CheckStateChanged и CheckedChanged могут применяться для определения изменения состояния метки. ToolStripManager Структуры меню и панелей инструментов могут вырасти до такого размера, что ими становится трудно управлять. Класс ToolStripManager предоставляет возможность создания маленьких, более управляемых фрагментов структур меню или панели инструментов с тем, чтобы потом при необходимости их комбинировать. Примером этого может служить форма, содержащая несколько элементов управления. Каждый из них должен отображать контекстное меню. Несколько пунктов меню должны быть доступны всем элементам управления, но каждый из них также содержит пару своих уникальных пунктов. Общие пункты меню могут быть определены в одном ContextMenuStrip . Каждый из уникальных пунктов меню может быть определен предварительно или создан во время выполнения. Для каждого элемента, которому требуется контекстное меню, общее меню клонируется, и к нему добавляются уникальные пункты с помощью метода ToolStripManager.Merge . Результирующее меню назначается свойству ContextMenuStrip элемента управления.
Глава 31. Windows Forms 1083 ToolStripContainer Элемент управления ToolStripContainer используется для стыковки элементов управления, основанных на ToolStrip . Добавление ToolStripContainer и установка свойству Docked значения Fill добавляет ToolStripPanel к каждой стороне формы, а ToolStripContainerPanel — в середину формы. Любой ToolStrip ( ToolStrip , MenuStrip или StatusStrip ) может быть добавлен к любой из панелей ToolStripPanel . Пользователь может переместить ToolStrip с помощью мыши на любую сторону или в нижнюю часть формы. Установив значение false свойству Visible для любой из панелей ToolStripPanel , можно запретить помещение на панель ToolStrip . Панель ToolStripContainerPanel в центре формы может быть использована для размещения других элементов управления, которые ей понадобятся. Формы Ранее в этой главе уже было показано, как создавать простое Windows-приложе- ние. Пример содержал один класс, унаследованный от System.Windows.Forms.Form . Согласно документации .NET Framework, “форма — это представление любого окна в вашем приложении”. Если у вас есть опыт разработки на Visual Basic, то термин форма вам должен быть знаком. Если же ваш опыт лежит в области C++ с применением MFC, то, вероятно, вы привыкли называть формы окнами, диалоговыми окнами или фреймами. Независимо от этого, можно сказать, что форма — это основное средство взаимодействия с пользователем. Ранее в этой главе уже раскрывались некоторые из наиболее часто используемых свойств, методов и событий класса Control , а поскольку класс Form является наследником Control , все те же методы, свойства и события присутствуют также в классе Form . Класс Form добавляет значительный объем функциональности к той, что обеспечена классом Control , и мы поговорим о ней в этом разделе. Класс Form Клиентские Windows-приложения могут содержать от одной до сотен различных форм. Формы могут быть основаны на SDI (Single Document Interface — однодокументный интерфейс) или же на MDI (Multiple Document Interface — многодокументный интерфейс). Независимо от этого, сердцем Windows-клиента остается класс System. Windows.Forms.Form . Класс Form унаследован от ContainerControl , который, в свою очередь, унаследован от ScrollableControl — прямого потомка Control . Отсюда можно предположить, что форма может служить контейнером для других элементов управления, предоставлять возможность прокрутки содержимого, когда оно не умещается в клиентской области, а также обладать множеством тех же свойств, методов и событий, которые присущи другим элементам управления. Все это делает класс Form достаточно сложным. В данном разделе мы рассмотрим б о льшую часть его функциональности. Создание и уничтожение экземпляра формы Важно хорошо понять процесс создания формы. То, что вы хотите сделать, зависит от того, где вы напишете инициализационный код. При создании экземпляра формы события происходят в следующем порядке: конструктор Load Activated Closing Closed Deactivate