У меня есть элемент управления, который я построил с несколькими элементами управления вводами, некоторые текстовые поля, поле со списком и список. Одно текстовое поле, поле со списком, окно списка и пара командных кнопок привязаны так, что они изменяют размер с помощью формы. Комбо-ящик привязан к левому, верхнему и правому, список привязан на всех четырех сторонах, а кнопки закреплены внизу и справа. Они все изменяют размер и правильное положение. Проблема заключается в текстовом поле, которое я пытаюсь привязать, так же, как в поле со списком. Он бежит с правой стороны формы во время выполнения, когда привязан вправо. Тем не менее, у меня нет этой проблемы с любым из существующих элементов управления в форме, которые привязаны вправо, все они остаются в таком положении, как предполагалось.
Я попытался добавить дополнительное текстовое поле и combobox и привязать их вправо, но они тоже сбегают с правого края формы. Почему существующие средства управления, кроме одного, работают так, как будто они должны, но один элемент управления и новые становятся слишком широкими?
Для справки я обработал созданный конструктором код, чтобы изменить порядок инструкций, чтобы привязка происходила после установки позиции и ширины, но это не помогло. Здесь код как для плохого текстового поля:
//
// txtComments
//
this.txtComments.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtComments.Location = new System.Drawing.Point(430, 6);
this.txtComments.Name = "txtComments";
this.txtComments.Size = new System.Drawing.Size(166, 20);
this.txtComments.TabIndex = 25;
И код для корректного поведения combobox:
//
// cbMacroList
//
this.cbMacroList.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.cbMacroList.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbMacroList.FormattingEnabled = true;
this.cbMacroList.Location = new System.Drawing.Point(128, 78);
this.cbMacroList.Name = "cbMacroList";
this.cbMacroList.Size = new System.Drawing.Size(468, 21);
this.cbMacroList.TabIndex = 30;
this.cbMacroList.SelectedIndexChanged += new System.EventHandler(this.cbMacroList_SelectedIndexChanged);
Один последний фрагмент фона состоит в том, что все эти элементы управления вышли из формы, когда я решил, что мне нужно будет повторно использовать функциональные возможности, предоставляемые формой в другой форме. Я выбрал все элементы управления, вырезал их и вставил в новый UserControl. До перехода на UserControl все они работали нормально. Это начало появляться после миграции.
Это довольно странно, но просто удаление элемента управления из формы и его повторное решение решило проблему. Я повторно рассмотрел созданный конструктором код в форме, в которой я использую элемент управления, и я не вижу абсолютно никакой разницы в том, как он создается или добавляется в форму. И все же это исправлено. Интересно, почему он так себя ведет...?
Вы уверены, что ваш неправильный контроль не основан на том, чего вы не ожидаете, например, панели или чего-то еще?
this.Controls
, так что нет панелей или что-либо, что мешает позиционированию и макету.
ListBox
- правильно закреплен на моей машине, но не на другой. Я попытался удалить его из проекта и заново добавить, но это не решило проблему (даже закрывая VS между). В конце концов я заменилListBox
наTextBox
(для меня это ошибка)