Кажется, что дочерняя форма MDI позволяет элементам управления родительского элемента отображаться, как если бы она была прозрачной - PullRequest
2 голосов
/ 22 июля 2011

Вот небольшой пример:

Обычная старая форма с картинкой и кнопкой. Ничего фантастического. В событии нажатия кнопки:

private void button1_Click(object sender, EventArgs e)
{
    Form form = new Form();
    form.MdiParent = this;
    form.BackColor = Color.Red;

    form.WindowState = FormWindowState.Maximized;
    form.Show();
}

enter image description here

Однако, когда я нажимаю на кнопку, это происходит:

enter image description here

Picturebox и кнопка все еще показывают, как будто дочерняя форма была прозрачной. Любые предложения о том, как это изменить? Я хочу, чтобы детская форма охватывала все, как обычная форма.

1 Ответ

3 голосов
/ 22 июля 2011

Проблема в том, что дочерние окна MDI являются дочерними для окна клиента MDI.Тот, с темно-серым фоном.Любой элемент управления, который вы поместите в родительский объект MDI, будет иметь более высокий Z-порядок и перекрывать окно клиента MDI.И, таким образом, любое дочернее окно MDI.Вы можете прикрепить элемент управления к краю, и Winforms автоматически уменьшит окно клиента MDI, чтобы соответствовать оставшемуся пространству.Что нужно сделать для кнопки, поместите ее на панель и закрепите на панели.Но это не поможет для изображения.

Из-за Winforms немного сложнее получить ссылку на окно клиента MDI, вам нужно перебрать коллекцию Controls родительского MDI, чтобы найти ее обратно.Вот так:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        this.IsMdiContainer = true;
        foreach (Control ctl in this.Controls) {
            if (ctl is MdiClient) {
                ctl.BackgroundImage = Properties.Resources.Chrysanthemum;
                ctl.BackgroundImageLayout = ImageLayout.Center;   // doesn't work
                break;
            }
        }
    }
}

Обратите внимание на комментарий, исправить это намного сложнее, чем я рассчитывал.Реализация события Paint для окна - вариант, но он мерцает, как дешевый мотель.

...