Windows forms свойство anchor

Как привязать элементы управления к Windows Forms How to: Anchor controls on Windows Forms

Если вы разрабатываете форму, размер которой может изменить пользователь во время выполнения, элементы управления в форме должны изменить его размер и правильно изменить расположение. If you’re designing a form that the user can resize at run time, the controls on your form should resize and reposition properly. Для динамического изменения размера элементов управления с помощью формы можно использовать Anchor свойство элементов управления Windows Forms. To resize controls dynamically with the form, you can use the Anchor property of Windows Forms controls. AnchorСвойство определяет точку привязки для элемента управления. The Anchor property defines an anchor position for the control. Когда элемент управления привязан к форме и изменяется размер формы, элемент управления сохраняет расстояние между элементом управления и положением привязки. When a control is anchored to a form and the form is resized, the control maintains the distance between the control and the anchor positions. Например, если имеется TextBox элемент управления, привязанный к левому, правому и нижнему краю формы при изменении размера формы, то TextBox элемент управления изменяет свой размер по горизонтали таким образом, чтобы он удерживает то же расстояние от правой и левой сторон формы. For example, if you have a TextBox control that is anchored to the left, right, and bottom edges of the form, as the form is resized, the TextBox control resizes horizontally so that it maintains the same distance from the right and left sides of the form. Кроме того, элемент управления располагается по вертикали, чтобы его положение всегда совпадало с нижним ребром формы. In addition, the control positions itself vertically so that its location is always the same distance from the bottom edge of the form. Если элемент управления не привязан и размеры формы изменяются, изменяется расположение элемента управления относительно границ формы. If a control is not anchored and the form is resized, the position of the control relative to the edges of the form is changed.

AnchorСвойство взаимодействует со AutoSize свойством. The Anchor property interacts with the AutoSize property. Дополнительные сведения см. в разделе Общие сведения о свойстве AutoSize. For more information, see AutoSize Property Overview.

Привязка элемента управления к форме Anchor a control on a form

В Visual Studio выберите элемент управления, который необходимо привязать. In Visual Studio, select the control you want to anchor.

Можно закрепить несколько элементов управления одновременно, нажав клавишу CTRL, щелкнув каждый из них, а затем выполнив оставшуюся часть этой процедуры. You can anchor multiple controls simultaneously by pressing the CTRL key, clicking each control to select it, and then following the rest of this procedure.

В окне Свойства щелкните стрелку справа от Anchor Свойства. In the Properties window, click the arrow to the right of the Anchor property.

Откроется редактор, в котором отображается крестик. An editor is displayed that shows a cross.

Чтобы задать привязку, щелкните верхнюю, левую, правую или нижнюю часть крестика. To set an anchor, click the top, left, right, or bottom section of the cross.

Читайте также:  Тема для windows несколько окон

По умолчанию элементы управления привязаны к верхнему и левому краю. Controls are anchored to the top and left by default.

Чтобы очистить сторону привязанного элемента управления, щелкните точку пересечения. To clear a side of the control that has been anchored, click that arm of the cross.

Чтобы закрыть Anchor Редактор свойств, Anchor еще раз щелкните имя свойства. To close the Anchor property editor, click the Anchor property name again.

Когда форма отображается во время выполнения, размер элемента управления изменяется так, чтобы оставаться расположенными на том же расстоянии от края формы. When your form is displayed at run time, the control resizes to remain positioned at the same distance from the edge of the form. Расстояние от привязанного периметра всегда остается таким же, как и расстояние, определенное при размещении элемента управления в конструктор Windows Forms. The distance from the anchored edge always remains the same as the distance defined when the control is positioned in the Windows Forms Designer.

Некоторые элементы управления, такие как ComboBox элемент управления, имеют ограничение по высоте. Certain controls, such as the ComboBox control, have a limit to their height. Привязка элемента управления к нижней части его формы или контейнера не может привести к превышению предельной высоты элемента управления. Anchoring the control to the bottom of its form or container cannot force the control to exceed its height limit.

Наследуемые элементы управления должны быть Protected доступны для привязки. Inherited controls must be Protected to be able to be anchored. Чтобы изменить уровень доступа элемента управления, задайте его Modifiers свойство в окне свойства . To change the access level of a control, set its Modifiers property in the Properties window.

Свойства Dock и Anchor в Winforms

Если вы относительно недавно занимаетесь разработкой графических приложений на c#, то вероятно уже сталкивались с проблемой, когда вы изменяете размер формы, при этом все компоненты (контролы) на ней остаются на своих местах, где вы их накидали в дизайнере Visual Studio. Может в определенных ситуациях такое поведение контролов и нужно, но это скорее редкость. Скорее всего вам хочется, чтобы различные кнопочки, текстбоксы, комбобоксы и т.д. изменяли местоположение, растягивались, сжимались в соответствие с формой, на которой располагаются. Чтобы не изобретать велосипед, взглянем какие свойства компонентов предлагаются в Winforms для данной цели.

Свойство Dock

Данное свойство (property) позволяет привязать элемент управления к одной из сторон родительского (parent) контрола, в котором располагается, либо полностью заполнить всё свободное пространство. Даже если просто перевести с английского, то Dock — это пристань, причал, док. Т.е. вы как бы причаливаете своим контроллом к одной из сторон родителя грубо говоря. Свойство Dock может принимать одной из шести значений перечисления DockStyle:

  • None (нет привязки, значение по умолчанию)
  • Fill (элемент управления заполняет свободное пространство)
  • Left (“прижимаемся” к левому краю)
  • Right (к правому краю)
  • Bottom (к низу)
  • Top (к верху)

Бегло рассмотрим каждое значение. None — компонент располагается там, где вы его расположили. При изменении родительского размера контрол сохраняет местоположение и размер.

Left — контрол прижимается к левому краю родителя, при этом занимает всю высоту, она фиксирована, но можно изменить ширину в дизайнере Visual Studio потянув мышью за правый край, либо в коде. Для примера кину на форму кнопочку (Button) и задам DockStyle.Left. Вот что получилось:

Читайте также:  Копировать вставить linux терминал

Запустив приложение, поизменяйте размеры формы и заметите, что ширина кнопки не меняется, а по высоте она растягивается, сжимается.
Right работает по аналогии с Left. Только контрол в этом случае прижимается к правому краю. Думаю здесь не стоит расписывать подробно…
Top — элемент управления цепляется к верхнему краю, занимает всю доступную ширину родителя, она фиксированная, а вот высоту можно поменять в дизайнере студии, либо в коде.

Опять же запустите приложение и измените размеры формы. Высота кнопки не меняется, по ширине — растягивается, сжимается.
Bottom — прижимает контрол к нижней части родителя. В остальном по данное свойство действует по аналогии с Top. Ничего сложного.

Fill — заполняет свободное пространство parent’а. Абсолютно никакие размеры контрола с таким свойством нельзя изменить в дизайнере студии, только лишь меняя размеры родителя.

Так же стоит сказать, что если вы попытаетесь задать сразу нескольким элементам управления одно и тоже свойство Dock из следующих — Left, Top, Bottom или Right, то данные контролы будут, образно говоря, прилипать друг к другу.

Для закрепления, взляните как можно не написав ни одной строчки кода, позиционировать несколько кнопок (Button) используя лишь свойство Dock:

Вкратце вроде рассмотрели свойство (property) Dock. Как можно заметить, оно не решает всех потребностей программиста, при позиционировании компонентов управления. К примеру, для некоторых контроллов Dock подходит очень редко. Например взять TextBox, задать ему DockBottom, будет смотреться некрасиво мягко сказать. Так вот, если данное свойство не удовлетворяет вашим потребностям, есть еще полезное property под названием Anchor. Рассмотрим его.

Свойство Anchor

Свойство Anchor предназначено для закрепления краев вашего компонента к краям родительского элемента, при этом изменяя размер parent’a, расстояние между указанными краями остается константой (постоянным). С англ. языка Anchor — это якорь. Условно говоря, вы кидаете якорь от края дочернего контрола к краю родителя. У компонентов четыре стороны, поэтому может быть максимум 4 якоря.

На словах может не сразу понятно что к чему, поэтому проиллюстрирую то, о чем только что написал:

Я кинул на форму ComboBox. По умолчанию его Anchor = Top, Left. Т.е. расстояние от его левого и верхнего края до аналогичных краев формы всегда постоянно. На рисунке справа я потянул за правую границу формы, а ComboBox так и остался в левом верхнем углу.
Допустим, если бы вы задали Anchor = Bottom, Right, то при изменении размеров формы комбобокс всегда был ближе к правому нижнему краю. По аналогии с комбинациями Top, Right и Bottom, Left. Поэкспериментируйте прямо в дизайнере Visual Studio, задавайте различные комбинации Anchor и растягивайте, сжимайте форму.

Если вам необходимо, чтобы контрол растягивался по ширине, задайте Left, Right. По высоте — Top, Bottom. Вот скриншот для первого случая:

В заключении данного кратенького обзора по позиционированию контролов Winforms языка программирования C#, хочу заметить, если вы меняете свойство Anchor, то Dock сбрасывается в значение по умолчанию (None). Аналогично, меняете Dock, проперти Anchor становится Left, Top (по умолчанию).

Control. Anchor Свойство

Определение

Возвращает или задает границы контейнера, с которым связан элемент управления, и определяет способ изменения размеров элемента управления при изменении размеров его родительского элемента. Gets or sets the edges of the container to which a control is bound and determines how a control is resized with its parent.

Значение свойства

Поразрядное сочетание значений AnchorStyles. A bitwise combination of the AnchorStyles values. Значения по умолчанию — Top и Left . The default is Top and Left .

Читайте также:  Navi для windows mobile

Примеры

В следующем примере кода в форму добавляется Button и задаются некоторые общие свойства. The following code example adds a Button to a form and sets some of its common properties. В этом примере кнопка привязывается к нижнему правому углу формы, чтобы сохранить ее относительное расположение при изменении размера формы. The example anchors the button to the bottom-right corner of the form so it keeps its relative position as the form is resized. Затем он задает BackgroundImage и изменяет размер кнопки на тот же размер, что и Image . Next it sets the BackgroundImage and resizes the button to the same size as the Image. Затем в примере задается значение TabStop true и задается TabIndex свойство. The example then sets the TabStop to true and sets the TabIndex property. Наконец, он добавляет обработчик событий для обработки Click события кнопки. Lastly, it adds an event handler to handle the Click event of the button. В этом примере необходимо иметь ImageList имя imageList1 . This example requires that you have an ImageList named imageList1 .

Комментарии

Используйте Anchor свойство, чтобы определить, как автоматически изменяется размер элемента управления при изменении размера его родительского элемента управления. Use the Anchor property to define how a control is automatically resized as its parent control is resized. Привязка элемента управления к его родительскому элементу управления гарантирует, что привязанные границы остаются в той же области, что и границы родительского элемента управления, когда изменяется размер родительского элемента управления. Anchoring a control to its parent control ensures that the anchored edges remain in the same position relative to the edges of the parent control when the parent control is resized.

Можно привязать элемент управления к одному или нескольким границам контейнера. You can anchor a control to one or more edges of its container. Например, если имеется объект Form со Button Anchor свойством, для которого задано значение Top и Bottom , то объект Button растягивается для поддержания привязанного расстояния к верхнему и нижнему краям, Form как и в Height Form случае увеличения. For example, if you have a Form with a Button whose Anchor property value is set to Top and Bottom , the Button is stretched to maintain the anchored distance to the top and bottom edges of the Form as the Height of the Form is increased.

AnchorСвойства и Dock являются взаимоисключающими. The Anchor and Dock properties are mutually exclusive. В каждый момент времени может быть задан только один, а последний набор имеет приоритет. Only one can be set at a time, and the last one set takes precedence.

Примечания для тех, кто наследует этот метод

При переопределении Anchor свойства в производном классе используйте свойство базового класса Anchor для расширения базовой реализации. When overriding the Anchor property in a derived class, use the base class’s Anchor property to extend the base implementation. В противном случае необходимо предоставить всю реализацию. Otherwise, you must provide all the implementation. Переопределение get методов доступа и для свойства не требуется set Anchor ; при необходимости можно переопределить только одно из них. You are not required to override both the get and set accessors of the Anchor property; you can override only one if needed.

Оцените статью