【问题标题】:Why is my child form not showing a custom icon in the taskbar?为什么我的子窗体没有在任务栏中显示自定义图标?
【发布时间】:2013-03-28 17:10:46
【问题描述】:

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

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

【问题讨论】:

  • 我认为这可能会分散问题的注意力,但有趣的是,在 using 循环中实例化 Microsoft.Office.Interop.Excel.Application 足以让表单显示其图标,但是从磁盘读取文件不是。

标签: c# winforms taskbar


【解决方案1】:

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

form.Icon = <your icon>;

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

【讨论】:

  • 我在子表单的设计器中明确设置了它。我还在子窗体的构造函数中以及在 Show 调用之后尝试了那行代码,但没有成功。
  • 图标在你的项目资源中吗?
  • 是的,我用form.Icon = Resources.Sample_Icon; 设置它(或者Icon = Resources.Sample_Icon;,如果我把它放在SampleForm 的构造函数中)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多