метки в родительской форме MDI не остаются на фоне дочерней формы? - PullRequest
1 голос
/ 03 декабря 2010

Пожалуйста, помогите мне.

У меня есть родительская форма MDI, в центре которой находится метка (для отображения названия приложения в центре). При открытии формы в этом родительском элементе MDI эта метка должна появляться на обратной стороне вновь открытой формы, но при отображении дочерней формы метка появляется перед вновь открытой формой (кажется, что вновь открытая форма находится между меткой и родительским MDI).

Как это сделать, пожалуйста, наставь меня.

спасибо

Ответы [ 4 ]

4 голосов
/ 03 декабря 2010

Это будет скрывать метку, пока у вас есть активные дети MDI, и показывать ее снова, когда активного ребенка больше нет.

    private void Form1_MdiChildActivate(object sender, EventArgs e)
    {
        if (ActiveMdiChild != null)
            label1.SendToBack();
        else
            label1.BringToFront();
    }

Надеюсь, это поможет.

3 голосов
/ 03 декабря 2010
public partial class MyMdiForm : Form
{
    public MyMdiForm()
    {
        InitializeComponent();
        foreach (Control control in Controls)
        {
            if (control is MdiClient)
                control.Paint += mdiBackgroundPaint;
        }
    }

    private void mdiBackgroundPaint(object sender, PaintEventArgs e)
    {
        var mdi = sender as MdiClient;
        if (mdi == null) return;

        e.Graphics.Clip = new System.Drawing.Region(mdi.ClientRectangle);
        e.Graphics.DrawString("*** YOUR NAME HERE ***",this.Font,Brushes.Red,100F,100F);
    }
}
2 голосов
/ 03 декабря 2010

Проблема в том, что ваша метка добавляется не в MdiClient (т.е. в серый контейнер Mdi), а в форму.

Но, к сожалению, AFAIK, невозможно добавить элементы управления в MdiClient.

Единственный способ - нарисовать то, что вы хотите, на событии Paint MdiClient, как предлагается в этой статье:

http://www.vbaccelerator.com/home/NET/Code/Libraries/Windows/MDI_Client_Area_Painting/article.asp

0 голосов
/ 03 декабря 2010

Что ж, очевидно, что-то не так с Z-порядком дочерних элементов управления родительского окна вашего MDI.(Дочерние элементы управления родителя включают вашу метку, а также окна документов MDI.)

Вы не показали ни одного своего кода, поэтому я не могу опубликовать конкретное решение.Возможно, посмотрите на метод SendToBack : вы можете попробовать позвонить:

yourBackgroundLabel.SendToBack();

при открытии нового окна MDI (дочерний / документ).

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