2013-07-31 20 views
0

我在同一個解決方案中有兩個Windows窗體應用程序項目(一個測試和一個產品)和一個dll項目。這兩個winforms應用程序項目只有一個類/函數,Program.Main(),我問的圖標和app.config文件。它們都引用包含其他所有內容(包括表單)的相同dll。
我想要的是能夠設置圖標(Form.Icon)和文本(Form.Text)每次顯示應用程序中的新窗體。這樣做的目的是爲測試和產品(以及不同的發佈位置設置)設置不同的窗口標題和圖標。我怎樣才能做到這一點?我嘗試使用屬性>應用程序>資源>圖標和清單設置圖標,但它不起作用。我會很高興得到一個不同的圖標,但文本將是一個很大的優點。在Application.Run(new Form())之前是否有一個事件可以在Program.Main()方法中訂閱,我可以設置圖標和文本屬性爲窗體顯示,還是其他解決方案? 編輯:我爲這樣的財產以後希望,因爲有很多的形式:從app.config中的字段在Main方法中顯示的任何新窗體的C#winforms事件

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)"; 
    } 
+0

你能夠對主DLL做任何更改嗎?你可以傳入構造函數中的圖標和窗口文本,並從DLL中設置它。然後根據哪個程序實例化不同的值。 –

+0

我可以對DLL進行更改,但我正在尋找更通用的解決方案,因爲我有許多第一種形式生成的表單。我添加了一個我期望的例子。 – zBomb

+1

你可以用windows鉤子做這種事情。然而,它不能替代正確的.NET技術。給這些表單另一個基類。 –

回答

1

您可以爲你的應用程序中使用形成了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派生。這應該可以解決你的問題。

+0

這些圖標是引用該DLL的項目中的資源。 DLL如何獲取兩個不同應用程序的圖標? – zBomb

+0

@zSwizz查看我的編輯 –

+0

非常好,謝謝! – zBomb

0

獲取值。

使用slowcheetah有一個app.config對於不同的版本是不同的。

0

我不明白你爲什麼不能在每個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文件,這應該很容易。

+0

我有很多由啓動表單生成的表單,並且希望所有表單都一樣。我添加了一個我期望的例子。 – zBomb

+0

@zSwizz同樣的想法適用。如果你的啓動窗體正在生成其他窗體,當它生成它們時,它可以基於它自己設置子窗體的圖標和文本。除非添加表單的地方有很多不同的代碼點,在這種情況下,我會考慮重構你的代碼,以便主表單加載其他表單(即包裝函數)只有一點。 –

相關問題