我在同一解决方案中有两个windows窗体应用程序项目(一个测试和一个产品)和一个dll项目。这两个winforms应用程序项目只有一个类/函数Program.Main()、我询问的图标和app.config文件。它们都引用了相同的dll,该dll包含其他所有内容(包括表单)
我想要的是能够在每次应用程序中显示新表单时设置图标(Form.icon)和文本(Form.text)。这样做的目的是为测试和生产提供不同的窗口标题和图标(以及不同的发布位置设置)。我怎样才能做到这一点?我尝试过用"属性">"应用程序">"资源">"图标和清单"设置图标,但不起作用。我很乐意得到一个不同的图标,但文字会是一个很大的优势。在Application.Run(new Form())之前,Program.Main()方法中是否有一个事件需要订阅,我可以在显示表单时设置图标和文本属性,或者任何其他解决方案?编辑:我希望有这样的东西,因为有很多形式:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
SomeClass.NewWinFormShown += NewWinFormShown;
Application.Run(new FrmTrackingList());
}
private static void NewWinFormShown(object sender, NewWinFormShownEventArgs e)
{
e.NewWinFormShown.Icon = ThisAppsIcon;//from resources
e.NewWinFormShown.Text += " (TEST)";
}
您可以为应用程序中使用的所有表单创建一个BaseForm
,它不是那么难的
public class AppForm : Form
{
public AppForm()
{
InitializeComponent();
This.Icon = MyAppSettings.AppIcon; <--read here
this.Text = "App Text"
}
}
编辑:对于访问dll中的图标,只需在dll中创建一个静态类并使用它
//In dll project
public static class MyAppSettings
{
public Icon AppIcon {get;set;}
}
//In Exe project
static void Main()
{
MyAppSettings.AppIcon = Resources.Icon; <--set here
//Rest of starting App Code goes here
}
然后让你所有的表单都来源于AppForm
。这应该能解决你的问题。
从app.config.中的字段中获取值
使用slowcheetah可以获得针对不同构建的不同app.config。
我不明白为什么不能在每个Program.Main
中设置图标和文本。保存表单并对其进行调整。而不是
Application.Run(new Form());
进行
Form myForm = new Form();
myForm.Icon = theFancyIcon; // from resources, or any other way you want to get it
myForm.Text = myTitleBarString;
Application.Run(myForm);
只要在每个版本中使代码不同,因为您已经有了不同的Program.Main文件,这应该很容易。