2010-12-03 4 views
1

Пожалуйста, помогите мне.ярлык в родительской форме MDI не остается в фоновом режиме дочерней формы?

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

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

благодаря

ответ

3
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); 
    } 
} 
4

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

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

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

+0

Thanks jvanrhyn для ответа. на каком событии, в какой форме я это кодирую? Пожалуйста, направляйте еще одну вещь. Это правильное поведение или что-то неправильно со мной. thanks – haansi 2010-12-03 10:32:53

+2

Это событие MdiChildActivate формы MDI. Это событие запускается как при активации и деактивации ребенка. – jvanrhyn 2010-12-03 12:22:51

+0

jvanrhyn Я пробовал этот код. Он частично решил проблему. При загрузке метки дочерней формы в обратную форму (родитель mdi) становится невидимым, и когда я закрываю дочернюю форму, возвращаюсь. Но это снова дает странные взгляды, как наступление и приход лейбла. Не может быть, почему некоторые из них могут оставаться там всегда оставаться видимыми на обратной стороне формы ребенка, и если ни одна дочерняя форма не будет открытой, она станет первым слоем. В то время, когда дочерняя форма появляется, этикетка исчезает, когда я закрываю дочернюю форму, она приходит снова. Пожалуйста посоветуй. Спасибо – haansi 2010-12-03 20:04:21

2

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

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

Единственный путь рисует то, что вы хотите на Paint случае MDICLIENT, как это было предложено в этой статье:

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

0

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

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

yourBackgroundLabel.SendToBack(); 

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

Смежные вопросы