WinForms Anchor Control меняет местоположение Происхождение? - PullRequest
3 голосов
/ 14 марта 2012

Я перенес свой проект C # / .NET 2.0 на Mono для использования на других платформах, но, похоже, это вызвало проблему в реализации NATIVE WinForms.

Я выделил проблему насвязь между свойством Anchor элемента управления (в частности, Button) и Y-компонентом его свойства Location.Когда для свойства AnchorStyle установлено значение Top, источником свойства Location является ClientArea формы (исключая строку заголовка).При изменении привязки на нижнюю часть, однако, источник изменяется на верхний левый угол всего окна (включая строку заголовка).

Вот небольшой класс Form, который иллюстрирует разницу:

public class RawCodeForm : Form
{
    public RawCodeForm()
    {
        Button b = new Button();
        b.Text = "Test";
        b.Location = new Point( 10, 10 );
        b.Size = new Size( 75, 23 );
        b.Anchor = AnchorStyles.Left | AnchorStyles.Top;
        //b.Anchor = AnchorStyles.Left | AnchorStyles.Bottom;

        this.Controls.Add( b );
        this.Size = new Size( 100, 200 );
        this.Location = new Point( 100, 100 );
        this.Show();
    }
}

Попробуйте поменять строки b.Anchor, чтобы увидеть изменение позиции.

Это задокументированная ошибка, или я пропускаю другое свойство, которое необходимо установить?


РедактироватьСпасибо, что указали, что форма начинается с размера (300 300).Я предполагал, что до установки было (0,0).

За пределами простой тестовой формы, приведенной выше, проблема теперь заключается в том, что изменение FormBorderStyle позже приводит к изменению размера формы.Я предполагаю, что в Mono (или в хост-ОС) изменяемый FormBorderStyle изменяет размер ClientArea в меньшую сторону, тогда как область ClientSize остается неизменной в родных WinForms.

1 Ответ

4 голосов
/ 14 марта 2012

Это потому, что вы изменили размер формы после добавления кнопки. Измените его до

this.Size = new Size(100, 200);
this.Location = new Point(100, 100);

Button b = new Button();
b.Text = "Test";
b.Location = new Point(10, 10);
b.Size = new Size(75, 23);
//b.Anchor = AnchorStyles.Left | AnchorStyles.Top;
b.Anchor = AnchorStyles.Left | AnchorStyles.Bottom;

this.Controls.Add(b);
this.Show();

Кнопка просто следует за изменением нижней границы, когда привязана к нижней части.

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