Показывать / скрывать, возвращать панель в родительской форме, когда дочерняя форма в родительской форме MDI закрывается или появляется

#c# #.net #winforms #panel

#c# #.net #winforms #панель

Вопрос:

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

В настоящее время я использую SendToBack () для отображения дочерней формы перед панелью, которая находится в родительской форме, но когда я закрываю дочернюю форму, панель не появляется обратно, даже если я использую :

BringtoFront()

или

 Panel1.Visible=true


    public partial class CHILD : Form
        {
      private void CHILD_Load(object sender, EventArgs e)
            {
                this.FormClosed  = new FormClosedEventHandler(CHILD_FormClosed);
            }

     void CHILD_FormClosed(object sender, FormClosedEventArgs e)
            {
                PARENTForm P = new PARENTForm();
                P.panel1.BringToFront();
                P.panel1.Visible = true; 

            }
}




public partial class Form1 : Form
   {
   private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
            {
                CHILD P = new CHILD();
                P.Showg();
                P.MdiParent = this;
                P.BringToFront();
                panel1.SendToBack();
                panel1.Visible = false;
            }
    }
  

ЭТО НЕ РАБОТАЕТ …. ПОЖАЛУЙСТА, ПОМОГИТЕ ..!

введите описание изображения здесь

Комментарии:

1. как вы открываете / вызываете свою дочернюю форму? дочерний. ShowDialog() ?

2. @ibram: нет, я использую ДОЧЕРНЮЮ. Показать()

3. если вы используете showdialog() вместо show(), ваша родительская форма будет знать, закрыта ли ваша дочерняя форма, и вы сможете выполнять свою работу с панелью в родительской форме.

4. showdialog() также не работает

5. вам не нужны bringtofront и sendtoback для вашей панели, просто используйте panel.visible, если вы просто хотите ее скрыть

Ответ №1:

Вы создаете новую родительскую форму в дочерней форме. Вам нужно передать объект родительской формы в дочернюю форму, а затем использовать его для отображения / скрытия панели и присвоения свойству panel Modifiers значения public. Например…

Родительская форма:

 public partial class ParentForm : Form
{
    public ParentForm()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        panel1.Visible = false;
        ChildForm childForm = new ChildForm();
        childForm.MdiParent = this;
        childForm.Show();
    }
}
  

Дочерняя форма:

 public partial class ChildForm : Form
{
    public ChildForm()
    {
        InitializeComponent();
    }

    private void Child_FormClosed(object sender, FormClosedEventArgs e)
    {
        ParentForm parentForm = (ParentForm)this.MdiParent;
        parentForm.panel1.Visible = true;
    }
}
  

Комментарии:

1. @Reniuz: хорошо, сэр, так в чем причина того, что когда мы создаем новую родительскую форму в дочерней форме, панель не отображается? Вызывается конструктор и выполняется метод InitializeComponent() , тогда почему панель не отображается?

2. Ну, вам не нужна другая родительская форма, поэтому вам не нужно создавать новую. Вам нужно использовать только один экземпляр родительской формы. Можете ли вы опубликовать весь свой код?

3. Я понимаю, что вы хотите сделать :).ОК. В вашем примере кода просто попробуйте изменить ParentForm P = new ParentForm(); statment на ParentForm P = (Родительская форма)this.MdiParent; в закрытом событии.

4. Я обновил код. При создании дочерней формы назначьте MdiParent = this; в событии закрытия возьмите родительский элемент из свойства MdiParent и установите panel1.Visible = true;

5. Я снова обновил свой код … он работает на 100%, я пытался 🙂 также не забудьте ИЗМЕНИТЬ свойство panel1 modifiers на public, чтобы вы могли получить к нему доступ в дочерней форме.

Ответ №2:

Используйте этот код в родительской форме

     private void MainMenu_ChildForm_Click(object sender, EventArgs e)
    {
            ChildForm frm = new ChildForm();
            frm.MdiParent = this;
            ShowHideMainPanel(frm);
            frm.Show();
    }

void ShowHideMainPanel(Form frm)
        {
            frm.FormClosed  = new FormClosedEventHandler(Form_Closed);
            panel1.Visible = false;
        }

        void Form_Closed(object sender, FormClosedEventArgs e)
        {
            panel1.Visible = true;
        }
  

назначив событие close для дочернего элемента, чтобы показать панель после ее закрытия