ShowInTaskbar = true, моя форма исчезает - PullRequest
3 голосов
/ 21 октября 2011

Приложение скомпилировано для .NET 2.0 (если оно уместно).Изначально форма создается с ShowInTaskbar = false, она не отображается на панели задач и все круто.Однако, когда определенное действие (перетаскивание файла на форму и начало загрузки файла) выполняет ShowInTaskbar = true (чтобы показать прогресс в изменении заголовка окна / функциональности панели задач win7), тогда основная форма исчезает.this.Show (), this.Visible = true - они не помогают.Форма нигде не найдена, пока ShowInTaskbar = false не будет выполнен.Затем он появляется в том же месте, где пропал без вести ... Есть идеи, что может произойти?

Ответы [ 4 ]

3 голосов
/ 03 января 2013

Я знаю, что этот вопрос задавался более года назад, но он все еще время от времени появляется в результатах поиска Google.

Как указано при настройке окон ShowInTaskbar, воссоздает всю форму (или что-то в этом роде),Поэтому, если у вас есть поля ввода или какие-либо другие элементы управления, они будут сброшены.

В моем случае я использовал ShowInTaskbar = false, когда я хочу свернуть свое приложение в области уведомлений, чтобы мое приложение небольше отображается на панели задач при сворачивании.Проблема возникает, когда вы восстанавливаете приложение в FormWindowState.Normal все элементы управления, которые у вас были ранее, сбрасываются.

Обходной путь - удалить все элементы управления "this.Controls.Remove (control1)" из формыперед вызовом ShowInTaskbar = false, а затем повторно добавьте их «this.Controls.Add (control1)» после восстановления формы.

Это моя работа.Надеюсь, это поможет вам и другим.

1 голос
/ 21 октября 2011

Ваше приложение занято между ShowInTaskBar = true и ... = false?

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

В этом случае вам может потребоваться запустить обработку в Windows.Forms.Timer или даже использовать другой поток (BackgroundWorker или ThreadPool), чтобы позволить вашему пользовательскому интерфейсу продолжать реагировать, пока вы выполняете обработку.

1 голос
/ 21 октября 2011

Это работает для меня:

using System.Windows.Forms;

class Test
{
    static void Main()
    {
        Form form = new Form();
        Button button = new Button { Text = "Toggle" };
        button.Click += delegate { form.ShowInTaskbar = !form.ShowInTaskbar; };
        form.Controls.Add(button);
        Application.Run(form);
    }
}

По общему признанию, оно мигает, когда вы переключаете его, но это не должно быть слишком важным.Есть ли у вас какие-либо события, которые могут быть инициированы как часть изменения, которое может скрывать вашу форму?

0 голосов
/ 13 февраля 2014

У меня возникла проблема с исчезновением панели, когда я установил для ShowInTaskbar значение false. Затем, когда я попытался установить его обратно в true, панель все еще отсутствовала. Это сводило меня с ума, так как все остальные элементы управления были в порядке, кроме панели. Он показывал «включено», «видно», все true, местоположение и размер были одинаковыми до и после установки «ShowInTaskbar». Я наткнулся на этот пост, и это то, что работает для меня. Надеюсь, что это помогает другим.

void ShowTaskbarIcon(bool e)
    {
        try
        {
            mf.Controls.Remove(mf.pnlMain);
            mf.ShowInTaskbar = e;
            mf.Controls.Add(mf.pnlMain);
        }
        catch (Exception ex)
        {
            ec.Get(ex.ToString(), 55, 1);
        }
    }

В основном я удаляю и добавляю, как уже сказано здесь, в ответах. Я просто хочу поблагодарить всех за помощь в поиске решения.

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