Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π—Π«Πš ΠŸΠ ΠžΠ“Π ΠΠœΠœΠ˜Π ΠžΠ’ΠΠΠ˜Π― Π‘# 2005 И ΠŸΠ›ΠΠ’Π€ΠžΠ ΠœΠ .NET 2.0. 3-Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 198

Автор Π­Π½Π΄Ρ€ΡŽ ВроСлсСн

Рис. 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();