Якоря не работают - PullRequest
       0

Якоря не работают

1 голос
/ 14 мая 2010

Положение: альтернативный текст http://lh4.ggpht.com/_1TPOP7DzY1E/S-1xy6gvB0I/AAAAAAAADNc/RRH5DpGnics/s800/Capture1.png

В форме A у меня есть TableLayoutPanel (Dock = Fill) и метка (родитель которой является Form, а не tablelayoutPanel), якоря которой установлены на Top + Bottom + Left + Right.

Теперь, когда я запускаю эту форму и изменяю ее размер, ярлык не центрируется в форме, как я ожидал.

Обходные

Ответы [ 6 ]

3 голосов
/ 14 мая 2010

При установке якорей на более чем 1 угол будет пытаться изменить размер метки, если только вы не установите для 1 угла привязку.

Если установить AutoSize на false и изменить TextAlign на MiddleCenter на этикетке, текст останется по центру, но это может быть нежелательно, так как размеры этикеток изменятся.

Обходной путь - захватить событие Resize для Form и вручную установить местоположение метки (не тестировалось) . Это будет означать, что вам не нужно устанавливать AutoSize в false и вам не нужно устанавливать якоря.

void OnResize(object sender, EventArgs e)
{
   Point pos = new Point((this.Width/2) - (Label.Width / 2), 
     (this.Height/2) - (Label.Height/2));
   Label.Location = pos;
}
2 голосов
/ 14 мая 2010

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

При отсутствии якорей метка может свободно перемещать вместо изменения размера, и она будет пропорционально оставаться на правильном расстоянии от краев форм.

1 голос
/ 14 мая 2010

Установка свойства Anchor заставляет элемент управления пытаться поддерживать постоянное расстояние от указанных ребер. Поэтому, если вы уменьшите форму, этикетка все равно сохранит свое расстояние от Top и Left и, следовательно, не должна оставаться по центру.

Я на самом деле думаю, что если вы хотите, чтобы метка оставалась по центру, вы должны установить для ее свойства Anchor значение None, , а не - Top, Bottom, Left, Right.

Теперь, если вы собираетесь изменить текст метки, вот вам компромисс:

  1. Установите для свойства Anchor вашего ярлыка значение None. Это будет держать его в центре.
  2. Установите свойство AutoSize вашего ярлыка на false. Это позволит вам указать постоянный размер.
  3. Установите размер метки на нечто значительно большее, чем нужно для любого текста, который вы хотите отобразить. Отцентрируйте полученную «раздутую метку» на форме.
  4. Установите для свойства TextAlign вашего ярлыка значение MiddleCenter.

По сути, это дает вам прямоугольник, который всегда центрируется в вашей форме, внутри которого находится некоторый текст, последовательно центрированный внутри этого прямоугольника.

1 голос
/ 14 мая 2010

У вас для автоматического изменения размера метки установлено значение true - я почти уверен, что именно это и вызывает проблему.

изменить его на false.

0 голосов
/ 14 мая 2010

Я не думаю, что это самоцентрируется. Когда вы изменяете размер формы, смещаются только правая и нижняя части, поэтому, если у вас есть свой якорь со всех четырех сторон, то будут следовать только правая и нижняя части метки (или любой элемент управления), оставляя левую и верхнюю части в покое ,

0 голосов
/ 14 мая 2010

Вы должны установить AutoSize в false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...