【问题标题】:Set taskbar icon of top level usercontrol (Winforms)设置顶级用户控件的任务栏图标(Winforms)
【发布时间】:2014-04-17 07:22:21
【问题描述】:

我有一个顶层(即像窗口一样)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();
    }
}


如何更改任务栏图标?
提前致谢 ;)

【问题讨论】:

    标签: c# .net winforms user-controls taskbar


    【解决方案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);
            }
    

    【讨论】:

    • 不幸的是,这些都不起作用。更改 ParentForm 的图标不会做任何事情,因为 UserControl 与表单是分开的,并且在任务栏中有自己的位置。至于第二种可能,这只会设置表单的图标
    • @Levi:第二种解决方案设置了任务栏中显示的图标。建议您也为所有表单设置它。根据 MSDN:项目的 Icon 属性指定将在文件资源管理器和 Windows 任务栏中为已编译的应用程序显示的图标文件 (.ico)。 并作为注释:设置应用程序的图标属性后,您还可以设置应用程序中每个窗口或窗体的图标属性。
    • 我试过了,还是不行。它不会抛出任何错误,而是任务栏图标保持为默认图标
    • @Levi:您是如何将用户控件添加到任务栏的?这可能会导致您的解决方案
    • 我通过调用Control.SetTopLevel() 方法将用户控件设置为顶层窗口来做到这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 2012-09-16
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多