Π ΠΈΡ. 21.21 ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ ErrorProvider
ΠΠ΄Π΅ΡΡ Π²Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅ΡΠ΅, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²Π²Π΅Π» Π±ΠΎΠ»Π΅Π΅ ΠΏΡΡΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΈ Π² ΠΎΡΠ²Π΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΡΠ΅ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΡΠΈΠ±ΠΊΠΈ (!) ΡΡΠ΄ΠΎΠΌ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ TextBox. ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΠ΄Π²Π΅Π΄Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ ΠΊ ΡΡΠΎΠΉ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, ΠΏΠΎΡΠ²ΠΈΡΡΡ "Π²ΡΠΏΠ»ΡΠ²Π°ΡΡΠΈΠΉ" ΡΠ΅ΠΊΡΡ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ErrorProvider ΡΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΡ "ΠΌΠΈΠ³Π°ΡΡ", ΡΡΠΎ ΡΡΠΈΠ»ΠΈΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ (ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π±Π΅Π· Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅).
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΎΠΉ Π²ΠΈΠ΄ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²Π²ΠΎΠ΄Π°, ΡΠΎ Π²Π°ΠΌ. ΠΏΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ, Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΡΡΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠ»Π°ΡΡΠ° Control, ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΡΡ Π² ΡΠ°Π±Π». 21.10.
Π’Π°Π±Π»ΠΈΡΠ° 21.10. Π‘Π²ΠΎΠΉΡΡΠ²Π° ΠΈ ΡΠΎΠ±ΡΡΠΈΡ Control
Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ ΠΈΠ»ΠΈ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ CausesValidation ΠΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²ΡΠ±ΠΎΡ ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π²Π²ΠΎΠ΄Π° Π΄Π»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΡΡΠ΅Π±ΡΡΡΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Validated Π‘ΠΎΠ±ΡΡΠΈΠ΅, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΠΎΠ΅ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²Π²ΠΎΠ΄Π° Validating Π‘ΠΎΠ±ΡΡΠΈΠ΅, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΠΎΠ΅ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Π²Π²ΠΎΠ΄ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΡΠΎΠΊΡΡ Π²Π²ΠΎΠ΄Π°)ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΄Π»Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π° CausesValidation Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true (ΠΈΡΡΠΈΠ½Π°) ΠΈΠ»ΠΈ false (Π»ΠΎΠΆΡ), ΠΏΡΠΈΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ true. ΠΡΠ»ΠΈ Π²Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true, Π΄Π°Π½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΈΠΌ ΡΠΎΠΊΡΡΠ° Π²Π²ΠΎΠ΄Π° Π·Π°ΡΡΠ°Π²ΠΈΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π² ΡΠΎΡΠΌΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π²Π²ΠΎΠ΄Π°. ΠΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠΎΠΊΡΡΠ° Π²Π²ΠΎΠ΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΡΡΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ ΡΠΎΠ±ΡΡΠΈΡ Validating ΠΈ Validated Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. Π ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΎΠ±ΡΡΠΈΡ Validating Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ErrorProvider. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ Validated, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°ΠΊΠΎΠ½ΡΠΈΡ ΡΠΈΠΊΠ» ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ.
Π’ΠΈΠΏ ErrorProvider ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΎΡΠ΅Π½Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ Π½Π°Π±ΠΎΡ ΡΠ»Π΅Π½ΠΎΠ². ΠΠ»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ°ΠΌΡΠΌ Π²Π°ΠΆΠ½ΡΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ BlinkStyle, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ Π»ΡΠ±ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΡΠ½Ρ ErrorBlinkStyle. ΠΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π°ΡΡΡΡ Π² ΡΠ°Π±Π». 21.11.
Π’Π°Π±Π»ΠΈΡΠ° 21.11. ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ErrorBlinkStyle
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ AlwaysBlink ΠΠ°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΡΠΈΠ±ΠΊΠΈ "ΠΌΠΈΠ³Π°ΡΡ", ΠΊΠΎΠ³Π΄Π° ΠΎΡΠΈΠ±ΠΊΠ° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π°Π·Π½Π°ΡΠ°Π΅ΡΡΡ ΡΡΡΠΎΠΊΠ° Π½ΠΎΠ²ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ, Π° ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠΆΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ BlinkIfDifferentError ΠΠ°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΡΠΈΠ±ΠΊΠΈ "ΠΌΠΈΠ³Π°ΡΡ", ΠΊΠΎΠ³Π΄Π° ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠΆΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ, Π½ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π°Π·Π½Π°ΡΠ°Π΅ΡΡΡ ΡΡΡΠΎΠΊΠ° Π½ΠΎΠ²ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ NeverBlink ΠΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° "ΠΌΠΈΠ³Π°ΡΡ" Π½ΠΈΠΊΠΎΠ³Π΄Π°ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡ ErrorProvider ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Button, TextBox ΠΈ Label, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡ. 21.21. ΠΠ°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΈΡΠ΅ Π² ΠΎΠΊΠ½ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΡΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ErrorProvider ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠΉΡΠ΅ ΡΡΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΠΌΡ tooManyCharactersErrorProvider. ΠΠΎΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° InitializeComponent().
private void InitializeComponent() {
β¦
//
// tooManyCharactersErrorProvider
//
this.tooManyCharaΡtersErrorProvider.BlinkRate = 500;
this.tooManyCharactersErrorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.AlwaysBlink;
this.tooManyCharactersErrorProvider.ContainerControl = this;
}
ΠΠΎΡΠ»Π΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ Π²ΠΈΠ΄Π° ErrorProvider Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠΈΠ²ΡΠ·ΠΊΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΊ TextBox Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΎΠ±ΡΡΠΈΡ Validating, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.
private void txtInput_Validating(object sender, CancelEventArgs Π΅) {
// ΠΠ»ΠΈΠ½Π° ΡΠ΅ΠΊΡΡΠ° ΠΌΠ΅Π½ΡΡΠ΅ 5?
if (txtInput.Text.Length βΊ 5) {
errorProvider1.SetError(txtInput, "ΠΠΎΠ»ΡΡΠ΅ 5 Π½Π΅Π»ΡΠ·Ρ!");
} else // ΠΡΠ΅ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π½Π΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½ΠΈΡΠ΅Π³ΠΎ.
errorProvider1.SetError(txtInput, ");
}
ΠΠ»Π΅ΠΌΠ΅Π½Ρ TreeView
ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ TreeView ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ Π΄Π°Π½Π½ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΡΡΠΊΡΡΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² ΠΈΠ»ΠΈ Π»ΡΠ±ΡΡ Π΄ΡΡΠ³ΡΡ ΡΡΡΡΠΊΡΡΡΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ "ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ-ΠΏΠΎΡΠΎΠΌΠΎΠΊ"). ΠΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ TreeView ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΎΡΠ΅Π½Ρ ΡΠΈΡΠΎΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ. ΠΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π·Π°Π΄Π°ΡΡ ΡΠ²Π΅Ρ ΡΠ·Π»ΠΎΠ², ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΠ·Π»Π° ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ. (ΠΠ°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½Π½ΡΠΌ ΡΠΈΡΠ°ΡΠ΅Π»ΡΠΌ Π·Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎΠ± ΡΡΠΎΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ .NET Framework 2.0 SDK.)
Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ TreeView, Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ Π²Π°ΡΠ΅Π³ΠΎ TabControl ΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½Ρ TreeView, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ ΡΡΠ΄ ΡΠ·Π»ΠΎΠ² Π½Π°ΠΈΠ²ΡΡΡΠ΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΡ Π½Π°Π±ΠΎΡ ΡΠΈΠΏΠΎΠ² Car (Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ), ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ·Π΅Π» Car ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π° ΠΏΠΎΠ΄ΡΠΈΠ½Π΅Π½Π½ΡΡ ΡΠ·Π»Π°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΠ΅ΠΊΡΡΡΡ ΡΠΊΠΎΡΠΎΡΡΡ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ ΠΈ Π»ΡΠ±ΠΈΠΌΡΡ ΡΠ°Π΄ΠΈΠΎΡΡΠ°Π½ΡΠΈΡ Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ. ΠΠ° ΡΠΈΡ. 21.22 ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π²ΡΠ΄Π΅Π»Π΅Π½ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΠΎΠΉ. Π’Π°ΠΊΠΆΠ΅ Π·Π°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Label ΠΊΡΠΎΠΌΠ΅ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΡΠ·Π»Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ ΠΈΠΌΠ΅Π½Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠ·Π»ΠΎΠ² (Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΠΈΠΌΠ΅ΡΡΡΡ).
Π ΠΈΡ. 21.22. ΠΠ»Π΅ΠΌΠ΅Π½Ρ TreeView Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ
ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Π½ ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ TreeView (Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ treeViewCars) ΠΈ Label (Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ lblNodeInfo), Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π² ΡΠ²ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ExoticControls Π½ΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» C#, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΡΠ΅Ρ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠΈΠΏΠ° Car, ΠΈΠΌΠ΅ΡΡΠΈΠΉ Radio.
namespace ExoticControls {
class Car {
public Car(string pn, int cs) {
petName = pn;
currSp = cs;
}
public string petName;
public int currSp;
public Radio r;
}
class Radio {
public double favoriteStation;
public Radio(double station) { favoriteStation = station; }
}
}
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΎΡ Form ΡΠΈΠΏ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ ΡΠΈΠΏ ListβΉβΊ (Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ listCars), ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ 100 ΡΠΈΠΏΠΎΠ² Car, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π·Π°Π½Π΅ΡΠ΅Π½Ρ Π² ΡΠΏΠΈΡΠΎΠΊ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΡΠΈΠΏΠ° MainForm, Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ BuildCarTreeView(), ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ void. ΠΠΎΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
public partial class MainWindow: Form {
// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ List Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Car.
private ListβΉCarβΊ listCars = new ListβΉCarβΊ();
public MainWindow() {
β¦
// ΠΠ°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅Π΅ΠΊ ListβΉβΊ ΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ TreeView.
double offset = 0.5;
for (int x = 0; x βΉ 100; x++) {
listCars.Add(new Car(string.Format("Car {0}", x), 10 + x));
offset += 0.5;
listCars[x].r = new Radio(89.0 + offset);
}
BuildCarTreeView();
}
β¦
}
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ petName ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ Π·Π°Π΄Π°Π΅ΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ x (Car 0, Car 1, Car 2 ΠΈ Ρ.Π΄.). Π’Π΅ΠΊΡΡΠ°Ρ ΡΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΡΠ΄Π²ΠΈΠ³Π° x Π½Π° 10 (ΠΎΡ 10 ΠΊΠΌ/Ρ Π΄ΠΎ 109 ΠΊΠΌ/Ρ), Π° Π»ΡΠ±ΠΈΠΌΠ°Ρ ΡΠ°Π΄ΠΈΠΎΡΡΠ°Π½ΡΠΈΡ Π·Π°Π΄Π°Π΅ΡΡΡ ΡΠ΄Π²ΠΈΠ³ΠΎΠΌ ΠΎΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ 89.0 Π½Π° 0.5 (90, 90.5, 91, 91.5 ΠΈ Ρ.Π΄.).
ΠΡΠ°ΠΊ, Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ Car, ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΏΡΠΎΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π° ΡΠ·Π»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ TreeView. ΠΠ΄Π΅ΡΡ ΡΠ°ΠΌΠΎΠ΅ Π²Π°ΠΆΠ½ΠΎΠ΅ β ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ·Π΅Π», ΠΊΠ°ΠΊ Π²ΡΡΡΠ΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΡΠ°ΠΊ ΠΈ ΠΏΠΎΠ΄ΡΠΈΠ½Π΅Π½Π½ΠΎΠ³ΠΎ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ System. Windows.Forms.TreeNode, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΌ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ· MarshalByRefObject. ΠΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° TreeNode.
public class TreeNode: MarshalByRefObject, ICloneable, ISerializable {
β¦
public Color BackColor { get; set; }
public bool Checked { get; set; }
public virtual ContextMenu ContextMenu { get; set; }
public virtual ContextMenuStrip ContextMenuStrip { get; set; }
public Color ForeColor { get; set; }
public int ImageIndex { get; set; }
public bool IsExpanded { get; }
public bool IsSelected { get; }
public bool IsVisible { get; }
public string Name { get; set; }
public TreeNode NextNode { get; }
public Font NodeFont { get; set; }
public TreeNodeCollection Nodes { get; }
public TreeNode PrevNode { get; }
public string Text { get; set; }
public string ToolTipText { get; set; }
β¦
}
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ·Π»Ρ TreeView ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π½Π°ΡΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠ²Π΅Ρ, ΡΡΠΈΡΡ, ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠ΅ ΠΌΠ΅Π½Ρ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, TreeNode ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠ»Π΅Π½Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ (ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌΡ) TreeNode. Π‘ ΡΡΠ΅ΡΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ BuildCarTreeView().
private void BuildCarTreeView() {
// TreeView Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠΎΠ·Π΄Π°Π½Ρ Π²ΡΠ΅ ΡΠ·Π»Ρ.
treeViewCars.BeginUpdate();
// ΠΡΠΈΡΡΠΊΠ° TreeView ΠΎΡ ΡΠ΅ΠΊΡΡΠΈΡ ΡΠ·Π»ΠΎΠ².
treeViewCars.Nodes.Clear();