Mungkin selama ini kita biasanya selalu membaca file konfigurasi yang ada di dalam project yang bersangkutan. Bagaimana caranya kalau ternyata file konfigurasi tersebut berada di dalam project (assembly) yang berbeda? Contoh kasusnya seperti apa?
Misalkan saya punya dua buah project. Project pertama merupakan sebuah windows application project yang Application Type nya saya rubah ke Class Library (.dll). Tujuan dari perubahan Application Type ini ke Class Library yaitu agar nantinya project win app lainnya dapat melakukan referensi ke dll yang dihasilkan oleh project ini, dimana di dalam project pertama ini hanya berisi sebuah windows form yang akan digunakan sebagai template form lainnya (kalau di asp.net 2.0 mungkin bisa kita asosiasikan dengan Master Page). Fitur ini dikenal dengan Visual Inheritance.
Form yang ada di project pertama ini terdapat sebuah label untuk digunakan sebagai judul dari form yang akan digunakan. Nah untuk BackColor dan ForeColor property dari label tersebut diatur oleh setting yang terdapat didalam file app.config project lain yang menggunakan form ini. Jadi warnanya tidak statik, bisa kita rubah dengan warna yang diinginkan. Kalau kita tidak melakukan hal seperti ini maka setiap kali warna background dan warna hurufnya ingin kita rubah maka kita harus lakukan perubahan secara manual di project pertama ini lalu build ulang, dan juga kita lakukan rebuild untuk project yang menggunakan form master ini.
Project kedua merupakan sebuah win app yang akan menggunakan form master yang telah dibuat di project pertama. Hal ini dilakukan agar semua form memiliki tampilan yang konsisten. Berikut langkah-langkahnya:
1. Buat sebuah windows application project, beri nama misalnya MasterForm.
2. Rename form yang ada menjadi MasterForm. Desain tampilan form seperti ini :
3. Tambahkan code dibawah ini di event handler Load (My.Application.Info.AssemblyName akan membaca nama assembly dari project yang menggunakan form ini). Perhatikan bahwa warna background dan warna huruf label ditentukan oleh setting yang ditetapkan di file app.config project lain.
1: Imports System.Configuration
2:
3: Public Class MasterForm
4:
5: Private Sub MasterForm_Load(ByVal sender As Object, _
6: ByVal e As System.EventArgs) Handles Me.Load
7:
8: Dim exeConfigExternal As New ExeConfigurationFileMap
9: exeConfigExternal.ExeConfigFilename = _
10: My.Application.Info.AssemblyName & ".exe.config"
11:
12: Dim config As Configuration = _
13: ConfigurationManager.OpenMappedExeConfiguration( _
14: exeConfigExternal, ConfigurationUserLevel.None)
15:
16: Me.lblCaption.BackColor = Color.FromName( _
17: config.AppSettings.Settings("CaptionBackColor").Value)
18: Me.lblCaption.ForeColor = Color.FromName( _
19: config.AppSettings.Settings("CaptionForeColor").Value)
20:
21: End Sub
22:
23: End Class
4. Rubah ApplicationType dari project ini ke Class Library :
5. Buat sebuah windows application lainnya. Tambahkan form baru, lalu pilih Inherited Form :
6. Pilih MasterForm yang telah dibuat pada project pertama :
7. Ketika anda buka form yang bersangkutan akan muncul error. Error tersebut karena ada nya pembacaan file app.config yang seharusnya dibaca ketika runtime. Akan tetapi error tersebut hanya terjadi ketika design time saja. Ketika di run tidak masalah. Jadi kalau selama masih dalam fase develop sebaiknya anda beri comment saja code yang dibuat di langkah ke-3. Sebelum di deploy anda uncomment lagi, lalu build ulang.
8. Rubah text caption label form yang baru saja ditambahkan (di project yang kedua), misal seperti ini :
9. Tambahkan setting berikut di file app.config (project kedua) :
1: <configuration>
2: <appSettings>
3: <add key="CaptionBackColor" value="Gray"/>
4: <add key="CaptionForeColor" value="Orange"/>
5: </appSettings>
6: .....
10. Build kedua project tersebut, lalu jalankan, dan hasilnya akan seperti ini :
11. Untuk merubah warna background dan hurufnya kita tinggal merubah setting nama warna yang ada file NamaAplikasi.exe.config ketika aplikasi sudah di deploy.