简短的回答是否定的,没有可以设置项目中所有表单使用的图标的中心位置。你必须自己做。您可以使用多种方法,包括在程序初始化期间使用反射为Form.DefaultIcon 设置支持字段。
第一步:获取图标。
这里有几个选项。您可以从文件、资源或嵌入式资源(是的,两种不同类型的资源)加载图标。或者应用程序图标,但你说你没有。
对于标准资源:
- 打开项目属性
- 点击
Add Resource、Add Existing File 并浏览到您的图标。
- 图标被添加到
Properties.Resources,并带有一个以文件命名的属性。
对于内容文件(随应用程序分发):
- 将图标文件添加到项目(添加现有项)
- 将文件的
Build Action 属性设置为Content。
- 将文件的
Copy to Output Directory 设置为Copy Always 或Copy if newer。
- 使用
new Icon(iconFilename)加载图标。
对于嵌入式资源:
- 将图标文件添加到项目(添加现有项)
- 将文件的
Build Action 设置为Embedded Resource。
- 使用
Assembly.CurrentAssembly.GetManifestResourceStream 将资源作为流打开。
在这三个中,我会为大多数事情选择标准资源。
使其工作 1:表单构造函数
将适当的加载代码添加到每个表单的构造函数中:
public partial class Form1 : Form
{
public Form1()
{
// Using standard resource method
Icon = Properties.Resources.FormIcon;
InitializeComponent();
}
}
使其工作 2:基类
这是一个相当简单的选项,假设您可以控制所有表单的源并且可以通过所有表单来更改它们的基类。基类只是在构造过程中设置表单的图标:
public class DefaultIconForm : Form
{
// Using content file method
private static readonly Icon _defaultIcon = new Icon("FormIcon.ico");
public DefaultIconForm()
{
Icon = _defaultIcon;
}
}
public partial class Form1 : DefaultIconForm
{
public Form1()
{
InitializeComponent();
}
}
您需要更改所有表单,并记住从DefaultIconForm 继承所有未来的表单。
使其工作3:修改Form.DefaultIcon
这是一个有点讨厌的技巧,它依赖于反射并且可能在某些时候失败,但这意味着不必更改应用程序中的任何其他代码。
打开您的Program.cs 文件并将此方法添加到Program 类:
private static void SetDefaultFormIcon()
{
var field = typeof(Form).GetField("defaultIcon", BindingFlags.Static | BindingFlags.NonPublic);
// And for completeness, this is the Embedded Resource method
using (var stream = typeof(Program).Assembly.GetManifestResourceStream($"{Application.ProductName}.FormIcon.ico"))
{
var ico = new Icon(stream);
field?.SetValue(null, ico);
}
}
现在从main() 调用SetDefaultFormIcon() 进行初始化。
正如所写,它适用于 .NET Framework 和 .NET 5 WinForms 应用程序。无法保证 defaultIcon 隐藏的静态字段将来不会更改,因此请准备好在某个时候它会中断。