Свернуть / развернуть оба экрана - PullRequest
1 голос
/ 15 августа 2011

У меня есть приложение, которое работает на 2 мониторах (скажем, основной экран и дополнительный экран).На дополнительном экране не установлено свойство блока управления.Это полностью зависит от функциональности основного экрана.Что я не могу понять, так это то, что, если я сворачиваю основной экран с панелью системных задач, мне нужно также свернуть дополнительный экран.Также, как только я максимизирую первичное, вторичное также должно быть максимизировано.

ОБНОВЛЕНИЕ Я устал делать что-то подобное, но все испортил.Как только приложение запускается, создается две формы, которые мне не нужны.

private void MainForm_Resize(object sender, EventArgs e)
{
     SecondaryLayoutForm secondaryLayoutForm = new SecondaryLayoutForm();
     if (this.WindowState == FormWindowState.Minimized)
     {
         secondaryLayoutForm.Hide();
     }
     else
     {
         secondaryLayoutForm.Show();
     }
}

Спасибо

1 Ответ

1 голос
/ 15 августа 2011

Попробуйте это в классе MainForm:

private SecondaryLayoutForm secondaryLayoutForm;

private void MainForm_Resize(object sender, EventArgs e)
{
   if (this.secondaryLayoutForm == null)
   {
      this.secondaryLayoutForm = new SecondaryLayoutForm();
   }

   // replace the 'this.ShouldShowSecondaryForm()' call with whatever 
   // your special condition is for showing the secondary form.
   if (this.WindowState != FormWindowState.Minimized && this.ShouldShowSecondaryForm())
   {
        this.secondaryLayoutForm.Show();
   }
   else
   {
        this.secondaryLayoutForm.Hide();
   }
}

Это делает MainForm ответственной за создание вашей SecondaryLayoutForm и контроль ее состояния окна - если вы этого не хотите, то подумайте о создании класса UIManager или чего-то такого, чтобы отделить это.

Обновление

Пример приложения, которое я написал с 2 формами. Это то, что в Form1, у Form2 просто есть текстовое поле, поэтому оно заметно отличается от Form1.

public partial class Form1 : Form
{
    private Form2 f2;

    public Form1()
    {
        InitializeComponent();
        this.Resize += new System.EventHandler(Form1_Resize);

        // Initialize Form2 
        f2 = new Form2();
    }

    void Form1_Resize(object sender, System.EventArgs e)
    {
       // whenever I change the size of Form1, make sure 
       // Form2 has the same WindowState
       f2.WindowState = this.WindowState;
    }

    // This is your condition to either show or hide the form.
    //
    // Rather than a checkbox, have something that will respond to whatever 
    // condition you have set out - probably an event on another class.
    private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
        if (checkBox1.Checked)
        {
            f2.Show();
        }
        else
        {
            f2.Hide();
        }
    }
}

Обновление: пример того, как сделать это из другого класса

public partial class UIManager
{
    private Form2 f1;
    private Form2 f2;
    private bool shouldShowForm2 = false;

    public bool ShouldShowForm2 
    { 
       get { return shouldShowForm2; }
       set { shouldShowForm2 = value;  OnShouldShowForm2Changed(); }
    }

    public UIManager()
    {
        InitializeComponent();

        // Initialize Forms
        f1 = new Form1();
        f2 = new Form2();
        f1.Resize += new System.EventHandler(f1_Resize);
        f1.Show();
    }

    void f1_Resize(object sender, System.EventArgs e)
    {
       // whenever I change the size of Form1, make sure 
       // Form2 has the same WindowState
       f2.WindowState = f1.WindowState;
    }

    // This is your condition to either show or hide the form.
    private void OnShouldShowForm2Changed(object sender, EventArgs e)
    {
        if (ShouldShowForm2)
        {
            f2.Show();
        }
        else
        {
            f2.Hide();
        }
    }
}

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

...