c# - 为什么我的子窗体没有在任务栏中显示自定义图标?

标签 c# winforms taskbar

我有一个 Windows 窗体应用程序,它使用自定义窗体在长时间操作期间显示进度条。此表单当前设置为与我程序中的其他窗口一起显示在任务栏上。然而,虽然我的应用程序的其他窗口显示相应的应用程序图标,但此自定义表单仅显示默认图标:

Default application icon in the taskbar

我将设计器中的图标设置为我所有其他窗口使用的相同图标文件,但只有这个特定的窗体有这个问题。该图标也正确显示在表单的标题中。在子窗体的构造函数或使用循环中使用 form.Icon = Resources.Sample_Icon; 手动设置图标似乎没有效果。

这是重现问题的代码示例:

// Inside Form1.cs on a button click
using (var form = new SampleForm())
{
    form.Show();

    for (int i = 0; i < numberOfIterations; ++i)
    {
        // Do work here in a real program

        // This function just calls progressbar.PerformStep():
        form.UpdateProgress();
    }
}

Show() 更改为 ShowDialog() 确实 显示了正确的图标,但是 DialogResult 在此并没有真正的意义情况。

我怀疑有一些事件或消息设置了永远不会被处理的 Windows 任务栏图标,但是当我扔进一个 form.Refresh() 和一个 Application.DoEvents( )(只是为了看看它是否有所作为),我仍然使用默认图标。

我错过了什么?而且,为什么 ShowDialog 可以正常工作?

我正在使用 C# 4.0。

最佳答案

窗体不会从父窗体继承它们的图标,即使调用了 ShowShowDialog。您可能应该尝试明确更改其他表单的图标。在当前代码中执行:

form.Icon = <your icon>;

或者,在您的其他表单的加载代码中执行,只需引用表单本身。

关于c# - 为什么我的子窗体没有在任务栏中显示自定义图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15688011/

相关文章:

c# - Vector_Point_to_Mat 和 Vector_Point2f_to_Mat 有什么区别

java - 当任务栏位置或大小发生变化时如何移动 JFrame?

c# - 单击任务栏中的按钮时,什么事件会发送到 Windows 窗体窗口?

windows-8 - 自定义任务栏悬停按钮的代码?

c# - 如何在 C# 中查找通用控件的标记

c# - P/Invoke 编码(marshal) float *&

winforms - winform 的应用程序设置 : cannot save application settings which has been added during the run time

c# - 如何防止将 Windows 窗体发送到后面或如何将其保持在特定的 z 顺序上

c# - C# 中是否有代码同义词之类的东西?

c# - 使用 C# Windows 应用程序在电子邮件正文中添加多个图像(内联)