我有一个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。
答案 0 :(得分:1)
即使调用Show
或ShowDialog
,表单也不会从父表单继承其图标。您应该尝试明确更改其他表单的图标。在当前代码中执行此操作:
form.Icon = <your icon>;
或者,在其他表单的加载代码中执行此操作,只需参考表单本身。