为什么我的孩子表单没有在任务栏中显示自定义图标?

时间:2013-03-28 17:10:47

标签: c# winforms taskbar

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

Default application icon in the taskbar

我将设计器中的图标设置为我所有其他窗口使用的相同图标文件,但只有这个特定的表单有这个问题。该图标也会在表单的标题中正确显示。在子窗体的构造函数或using循环中使用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。

1 个答案:

答案 0 :(得分:1)

即使调用ShowShowDialog,表单也不会从父表单继承其图标。您应该尝试明确更改其他表单的图标。在当前代码中执行此操作:

form.Icon = <your icon>;

或者,在其他表单的加载代码中执行此操作,只需参考表单本身。