C# 为什么我的子窗体在任务栏中不显示自定义图标?

C# 为什么我的子窗体在任务栏中不显示自定义图标?,c#,winforms,taskbar,C#,Winforms,Taskbar,我有一个Windows窗体应用程序,它使用自定义窗体在长时间操作期间显示进度条。此表单当前设置为与我的程序中的其他窗口一起显示在任务栏上。但是,当我的应用程序的其他窗口显示相应的应用程序图标时,此自定义窗体仅显示默认图标: 我将设计器中的图标设置为所有其他windows使用的相同图标文件,但只有此特定窗体存在此问题。该图标也正确显示在表单的标题中。使用form.icon=Resources.Sample\u图标手动设置图标似乎没有效果 下面是重现问题的代码示例: // Inside Form1

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

我将设计器中的图标设置为所有其他windows使用的相同图标文件,但只有此特定窗体存在此问题。该图标也正确显示在表单的标题中。使用
form.icon=Resources.Sample\u图标手动设置图标似乎没有效果

下面是重现问题的代码示例:

// 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();
    }
}
//在Form1.cs中单击按钮
使用(var form=new SampleForm())
{
form.Show();
对于(int i=0;i
Show()
更改为
ShowDialog()
确实会显示正确的图标,但DialogResult在这种情况下并没有真正的意义

我怀疑有一些事件或消息设置了Windows任务栏图标,但当我抛出
form.Refresh()
Application.DoEvents()
(只是为了看看它是否有所不同)时,我仍然有默认图标

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


我使用的是C#4.0。

表单不会从父表单继承其图标,即使调用了
Show
ShowDialog
。您可能应该尝试显式更改其他窗体的图标。在当前代码中执行以下操作:

form.Icon = <your icon>;
form.Icon=;

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

我认为这可能会分散对问题的注意力,但有趣的是,在使用循环中实例化Microsoft.Office.Interop.Excel.Application足以让表单显示其图标,但从磁盘读取文件不是这样,我在子窗体的设计器中显式地设置了它。我也在子窗体的构造函数和Show调用之后尝试了这一行代码,但没有成功。图标是否在项目资源中?是的,我将其设置为
form.icon=resources.Sample\u icon
(或者
Icon=Resources.Sample_Icon;
,如果我把它放在SampleForm的构造函数中)。