private void Form1_Load(object sender, System.EventArgs e) {
// ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΈΠΏ ΠΊΠ½ΠΎΠΏΠΊΠΈ ...
DataGrid grid = new DataGrid();
AddType(grid.GetType());
}
Π’Π΅ΠΏΠ΅ΡΡ Π·Π°ΠΊΠΎΠ½ΡΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΠ°ΠΆΠ°Π² Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ System.Windows.Forms.DataGrid, ΡΠ²ΠΈΠ΄ΠΈΠΌ:
ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΡΠ±ΠΎΡΠΊΠΈ
ΠΠ°Π²Π΅ΡΡΠ°Ρ ΡΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΠ±ΠΎΡΠΊΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ±ΠΎΡΠΊΡ Π² ΠΏΠΎΠΈΡΠΊΠ°Ρ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌΠΈ ΠΈΠ· System.Windows.Forms.Control, ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ .
Π§ΡΠΎΠ±Ρ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΠ±ΠΎΡΠΊΡ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ URL. ΠΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π² Form1_Load:
private void Form1_Load(object sender, System.EventArgs e) {
// ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΈΠΏ ΠΊΠ½ΠΎΠΏΠΊΠΈ ...
DataGrid grid = new DataGrid();
AddType(grid.GetType());
// Π½Π°ΠΉΡΠΈ ΠΈΠΌΡ Π½Π°ΡΠ΅ΠΉ ΡΠ±ΠΎΡΠΊΠΈ
String filename = this.GetType().Module.Assembly.CodeBase;
ΠΡΠ° ΡΡΡΠΎΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ΅Ρ Π½ΠΈΠΊΠΎΠΉ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅ΠΉ ΠΊΠ»Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠ΄. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΅Π΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈΠ· URL ΡΠ±ΠΎΡΠΊΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉ Form1.
ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΡΠ±ΠΎΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ tryβ¦catch, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΉΡΠΈ Π² ΡΡΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ. ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΠ±ΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° Assembly:
// ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΈ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΠ±ΠΎΡΠΊΡ ...
try {
// ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ LoadFrom ...
Assembly controlAssembly = Assembly.LoadFrom(filename);
ΠΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ Π² Π½Π΅ΠΉ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ :
// ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠΏΠΈΡΠΎΠΊ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ ...
foreach(Type testType in controlAssembly.GetTypes()) {
ΠΠ°Π»Π΅Π΅ Ρ ΠΈΡΡΠΎΡΡΡ ΡΠΎΡΡΠΎΠΈΡ ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ , Π½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² Control. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π²ΡΠ΅ ΡΡΠΎ ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΎ Π² Π΄ΡΡΠ³ΠΎΠΉ Π±Π»ΠΎΠΊ tryβ¦catch, ΡΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ.
// ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
// ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ...
try {
Control testControl = (Control)Activator.CreateInstance(testType);
ΠΠΎΠ»Π΅Π·Π½ΡΠΉ ΡΠΎΠ²Π΅Ρ. System.Windows.Forms.Form ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌ ΠΎΡ Control, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·Π°ΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² Control Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π½Π°ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π² ΡΠΎΡΠΌΠ΅. ΠΡΠ»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ TopLevelControl, ΠΎΠ½ΠΎ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ Π·Π°Π΄Π°Π½ΠΎ ΠΏΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ· ΡΠΎΡΠΌΡ.
// Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ,
// ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ "Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ" ...
if (testControl.TopLevelControl == null) {
// Π΅ΡΠ»ΠΈ ΠΌΡ Π·Π΄Π΅ΡΡ ΠΎΠΊΠ°Π·Π°Π»ΠΈΡΡ, ΡΠΎ ΡΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ...
AddType(testType);
}
}
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π²Π΅ΡΡΠΈΡΡ ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π²ΡΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ:
catch {
// Π΅ΡΠ»ΠΈ ΠΌΡ Π·Π΄Π΅ΡΡ, ΠΌΡ Π½Π΅ Π·Π°Π±ΠΎΡΠΈΠΌΡΡ ΠΎΠ± ΠΎΠ±ΡΠ΅ΠΊΡΠ΅!
}
}
} catch(Exception Π΅Π΅) {
MessageBox.show("The assembly could not be loaded. " + Π΅Π΅.Message);
}
}
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ DemoTextBox, ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ:
public class DemoTextBox : System.Windows.Forms.TextBox
Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠ»Π°ΡΡ, Π½Π° ΡΡΠΎΡ ΡΠ°Π· Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ DemoMonthCalendar, ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅:
public class DemoMonthCalendar : System.Windows.Forms.MonthCalendar
ΠΡΠΏΠΎΠ»Π½ΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ· ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ ΠΌΡ ΡΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈΡ Π² ΡΠΎΡΠΌΡ. ΠΡ Π²Π²Π΅Π»ΠΈ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΎΡ System.Window.Forms.Button, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅. ΠΡ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ ΡΠ°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ Ρ Π½ΠΎΠ²ΡΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠ΅ ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΡΠ±ΠΎΡΠΊΠΈ Π² ΠΏΠΎΠΈΡΠΊΠ°Ρ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΈΠ·ΡΡΠ΅Π½Π½ΡΡ ΡΠ΅Ρ Π½ΠΈΠΊΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΡΡΠΎΠΉ ΡΡΠΈΠ»ΠΈΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΡΠΈ ΠΊΠ»Π°ΡΡΡ ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.