显示的任何新表单的Main方法中的C#winforms事件



我在同一解决方案中有两个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文件,这应该很容易。

最新更新