Установить значок на панели задач пользовательского элемента управления верхнего уровня (Winforms)

У меня есть верхний уровень (т.е. действует как окно) UserControl (.NET 4.0), который я использую для моделирования пользовательской формы. Я могу легко установить текст заголовка и текст панели задач следующим образом:

public override string Text
{
    get { return base.Text; }
    set
    {
        base.Text = value
        TitleText.Text = value;
    }
}

Который устанавливает как текст заголовка, так и текст панели задач:

Чего я уже добился

Обратите внимание, что панель внизу изображения — это моя панель задач; Я установил альтернативную оболочку


Проблема, с которой я столкнулся, заключается в том, что я не могу установить значок панели задач для этого UserControl, так как у него нет переопределяемого свойства Icon, поэтому я не могу установить значок панели задач, как я бы с текстом. Также обратите внимание, что значок, показанный в UserControl, является просто PictureBox, содержащим изображение.

Итак, вкратце, я хочу иметь возможность сделать это:

Чего я хочу достичь

Но я не могу этого сделать, так как для UserControl нет свойства Icon:

public override Icon Icon
{
    get { return base.Icon; }
    set
    {
         base.Icon = value;
         TitleBarIcon.Image = value.ToBitmap();
    }
}


Как изменить значок на панели задач?
Заранее спасибо ;)


person Levi    schedule 17.04.2014    source источник


Ответы (1)


Я не уверен, правильно ли я вас понял, но я думаю, что у вас есть возможности:

Либо установите значок ParentForm.

Или установите ApplicationIcon, как описано здесь: http://msdn.microsoft.com/en-us/library/339stzf7.aspx

ИЗМЕНИТЬ:

Поскольку вы используете элемент управления в качестве TopLevelControl, вам необходимо отправить WM_SETICON при создании элемента управления - как и форма!

Взято из Form.CreateHandle:

        Icon icon = this.Icon;
        if (icon != null && this.TaskbarOwner.Handle != IntPtr.Zero)
        {
            UnsafeNativeMethods.SendMessage(this.TaskbarOwner, 128, 1, icon.Handle);
        }
person toATwork    schedule 17.04.2014
comment
К сожалению, ни один из них не работает. Изменение значка ParentForm ничего не даст, поскольку UserControl отделен от формы и имеет свое место на панели задач. Что касается второй возможности, это установит только значок формы - person Levi; 17.04.2014
comment
@Levi: второе решение устанавливает значок, который отображается на панели задач. Также рекомендуется установить его для всех форм. Согласно MSDN: Свойство Icon для проекта указывает файл значка (.ico), который будет отображаться для скомпилированного приложения в проводнике и на панели задач Windows. и как примечание: После установки свойства значка для приложения вы также можете установить свойство значка для каждого окна или формы в приложении. - person toATwork; 17.04.2014
comment
Я пробовал это, и это все еще не работает. Он не выдает ошибок, вместо этого значок на панели задач остается значком по умолчанию. - person Levi; 17.04.2014
comment
@Levi: как вы добились того, чтобы пользовательский элемент управления отображался на панели задач? Это может привести к вашему решению - person toATwork; 17.04.2014
comment
Я сделал это, вызвав Control.SetTopLevel(), устанавливающий пользовательский элемент управления в окно верхнего уровня - person Levi; 17.04.2014