Форма без полей отображает границы на мгновение, когда отображается внутри контейнера mdi

Обновление (2011-01-17):

Я создаю форму с FormBorderStyle=None внутри MdiContainer. Когда я показываю первую форму, даже если она уже была создана, на долю секунды она появляется с синей рамкой нормальной формы, затем она переворачивается.

В следующем примере, кликнув один раз и снова на button1, он будет время от времени показывать это поведение, хотя это очень короткий промежуток времени, поэтому я думаю, что это будет трудно увидеть на очень быстрой машине; однако в моем производственном коде с элементами управления.net сторонних производителей он показывается гораздо дольше.

Чтобы попробовать это, просто создайте новый проект и форму окна с именем Form2, добавьте кнопку в Form1, добавьте события Form1_Load и button1_Click и вставьте код. Затем нажмите кнопку 1 на некоторое время.

public partial class Form1 : Form
{
    Form2 form;
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        form.Visible = !form.Visible;
        form.MdiParent = this;

    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.IsMdiContainer = true;
        form = new Form2();
        form.FormBorderStyle = FormBorderStyle.None;
    }
}

Это не зависит от языка, поэтому, пожалуйста, не меняйте мои теги без веской причины.

3 ответа

У меня была та же проблема в моем приложении, и я добавил следующую строку в качестве первой строки в функции загрузки формы, чтобы устранить проблему

this.FormBorderStyle = FormBorderStyle.None;

Если что-то замедляет ваш основной поток пользовательского интерфейса, Windows будет рисовать форму, используя значения по умолчанию (по крайней мере, в мире DVM в Vista/Windows 7), пока ваш поток снова не станет отзывчивым. Убедитесь, что ваш поток пользовательского интерфейса не ожидает в других потоках и не выполняет тяжелую обработку при первом показе формы.

Это может зависеть от того, меняете ли вы FormBorderStyle на Load, в конструкторе или на Shown. Лучше всего сделать это в конструкторе (метод InitializeComponents).

Другие вопросы по тегам