C # Windows Forms, не отображать форму на панели задач, но заставить ее идти вперед, когда форма, показанная там, сфокусирована - PullRequest
3 голосов
/ 03 апреля 2012

Я делаю приложение, которое будет иметь интерфейс, похожий на Photoshop: несколько отдельных форм помогают редактировать объект. Итак, у меня будет несколько форм, одна из которых является «основной» (предоставляет меню файлов, меню настроек и т. Д.), А другие имеют элементы управления, которые редактируют объект, открытый в главной форме.

Допустим, для простоты это текстовый редактор, и у меня есть MainForm и StyleForm. Теперь мне нужно, чтобы все приложение отображалось в виде одной «панели» на панели задач Windows. Этого можно достичь, установив для ShowInTaskbar значение false для StyleForm, но затем, если я, скажем, сфокусирую другое приложение, затем сфокусирую мое приложение, только MainForm окажется поверх других окон, StyleForm останется скрытым под окном приложения, на которое я нацелился ранее.

Я нашел ответ здесь Сделайте так, чтобы все формы, связанные с программой, выходили на первый план, когда выбрана одна форма , но она импортирует dll. Может быть, для этого есть решение .net?

Кроме того, я хотел бы отобразить что-то другое на панели задач, а не заголовок MainForm, это возможно?

Ответы [ 2 ]

11 голосов
/ 03 апреля 2012

Я установил вторую форму на ShowInTaskBar = false, установил FormBorderStyle на SizableToolWindow, а затем создал ее, используя следующий код:

public partial class Form1 : Form
{
    Form2 f2;

    public Form1()
    {
        InitializeComponent();

        f2 = new Form2();
        f2.Owner = this;  // <-- This is the important thing
        f2.Show();
    }
}

Это заставляет подчиненную форму F2 оставаться на вершинеForm1 и скрывает и показывает его, когда Form1 скрыто и отображается.

РЕДАКТИРОВАТЬ
О, я использовал клиентский профиль Visual Studio 2010 и .NET 4, если этоважный.Это должно работать с другими версиями, однако.

0 голосов
/ 03 апреля 2012

В главном окне вы можете перехватить событие Focus, а затем для каждой подчиненной формы вызвать метод BringToFront

...