Как исключить элемент управления WinForms из автоматического масштабирования? - PullRequest
1 голос
/ 01 декабря 2011

У меня есть UserControl, который содержит TextBox.

Когда размер моего родителя UserControl изменяется, внутренний TextBox аккуратно перемещается.

Если размер UserControl изменяется из-за автоматического масштабирования формы, то мой UserControl масштабируется (как и должно быть). Но тогда мой ребенок TextBox уменьшился из-под меня.

Как я могу исключить мою собственную TextBox из масштабирования?

Механизм работает таким образом, что я не могу "исправить его потом"; что повезло, потому что я не хочу прибегать к такому уродливому хаку (т.е. я хочу правильного решения).


я пытался не звонить base.ScaleControl:

public partial class MyControl : UserControl
{
   protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
   {
      //base.ScaleControl(factor, specified);
      UpdateTextBoxPosition();
   }
}

но это не сработало.

1 Ответ

1 голос
/ 02 декабря 2011

Я думаю, что вы на правильном пути, но неправильный элемент управления.

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

public class UnscaledTextBox : TextBox {

  protected override void OnParentFontChanged(EventArgs e) {
    //base.OnParentFontChanged(e);
  }

  protected override void ScaleControl(SizeF factor, BoundsSpecified specified) {
    //base.ScaleControl(factor, specified);
  }
}

Используйте элемент управления UnscaledTextBox в вашемUserControl и посмотреть, если это поможет.

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