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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ КПК ΠΈ смартфонов Π½Π° .NET Compact FrameworkΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 20

Автор АлСксандр Климов

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Π° история создания этого прилоТСния. Π‘Π°ΠΌ Π°Π²Ρ‚ΠΎΡ€ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ вСрсии писал ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π΅Ρ‰Π΅ Π½Π° Visual Studio .NET 2003 для смартфонов ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ систСмы Smartphone 2003. Когда я скачал исходный ΠΊΠΎΠ΄ ΠΈ попытался Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, Ρ‚ΠΎ срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Visual Studio .NET 2005 ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ»Π° ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π― согласился, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, послС ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»ΠΊΠΈ, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ запускался Π² Visual Studio 2005 ΠΈ использовал эмулятор Smartphone 2003. Но ΠΌΠ½Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для смартфонов Windows Mobile 2005. Для этого достаточно Π±Ρ‹Π»ΠΎ Π² свойствах ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ. Π‘Π½ΠΎΠ²Π° нСсколько ΠΌΠΈΠ½ΡƒΡ‚ Ρ€Π°Π·Π΄ΡƒΠΌΠΈΠΉ, ΠΈ Visual Studio Π²Ρ‹Π΄Π°Π΅Ρ‚ Π΅Ρ‰Π΅ Ρ€Π°Π· ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Но ΠΈ этого ΠΌΠ½Π΅ ΠΌΠ°Π»ΠΎ. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ .NET Compact Framework 1.0. ПослС Π²Ρ‹Π±ΠΎΡ€Π° Π½ΡƒΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ свойств ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΎΠ½ стал ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ .NET Compact Framework 2.0. ΠžΡΡ‚Π°Π»ΠΎΡΡŒ лишь пСрСвСсти Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π° русский язык ΠΈ ввСсти Π½ΠΎΠ²Ρ‹Π΅ возмоТности .NET Compact Framework 2.0 вмСсто старых конструкций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ»ΠΈΡΡŒ для .NET Compact Framework 1.0.

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€

Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ‚Π°ΠΊ ΠΈ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ содСрТимоС ΠΏΠ°ΠΏΠΎΠΊ, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ лишниС Ρ„Π°ΠΉΠ»Ρ‹, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠ°ΠΏΠΊΠΈ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Π’Ρ€ΡƒΠ΄Π½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Microsoft Ρ€Π΅ΡˆΠΈΠ»Π° Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Π² состав систСмы Windows Mobile. ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ смартфонов ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ собствСнной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² состав стандартных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Но ΠΌΡ‹ с Π²Π°ΠΌΠΈ напишСм свою ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ интСрСснСС.

ГрафичСский интСрфСйс ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π£ создаваСмого прилоТСния Π±ΡƒΠ΄Π΅Ρ‚ своя ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. ΠŸΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ содСрТимоС ΠΏΠ°ΠΏΠΊΠΈ My Documents. Π‘Π°ΠΌ графичСский интСрфСйс ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΡ‡Π΅Π½ΡŒ прост ΠΈ понятСн. Навигация ΠΏΠΎ ΠΏΠ°ΠΏΠΊΠ°ΠΌ осущСствляСтся простым Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π½ΡƒΠΆΠ½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ Enter. Для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° ΠΎΠ΄ΠΈΠ½ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Π²Π΅Ρ€Ρ… Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΏΠΊΡƒ, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½ΡƒΡŽ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ. ΠŸΡƒΠ½ΠΊΡ‚ мСню Π’Ρ‹Ρ…ΠΎΠ΄ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€, Π° ΠΏΡƒΠ½ΠΊΡ‚ МСню позволяСт Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ (рис. 7.3).

Рис. 7.3. ΠžΠ±Ρ‰ΠΈΠΉ Π²ΠΈΠ΄ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°

МСню содСрТит ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для всСх стандартных Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ, ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹. Π’Π°ΠΊΠΆΠ΅ имССтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ярлыками. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ сначала Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ», Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ярлык. ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Бвойства появляСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ (рис. 7.4).

Рис. 7.4. Окно свойств

Π’ этом ΠΎΠΊΠ½Π΅ отобраТаСтся справочная информация ΠΎ Ρ„Π°ΠΉΠ»Π΅ ΠΈΠ»ΠΈ ΠΏΠ°ΠΏΠΊΠ΅. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ смоТСт Π½Π°ΠΉΡ‚ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°, Π΄Π°Ρ‚Ρƒ Π΅Π³ΠΎ создания ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Код ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ написанию ΠΊΠΎΠ΄Π°. ΠŸΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ выполняСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события Form_Load. ΠŸΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ основной Ρ„ΠΎΡ€ΠΌΡ‹ MainForm Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΠ΄, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π² листингС 7.9.

Листинг 7.9

ListViewHelper.SetGradient(listView);

string bs = Path.DirectorySeparatorChar.ToString();

// УстанавливаСм Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ

this.path = bs + "My Documents" + bs;

// ЗаполняСм список ΠΏΠ°ΠΏΠΎΠΊ ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²

fillList();

Π‘Π½Π°Ρ‡Π°Π»Π° устанавливаСтся внСшний Π²ΠΈΠ΄ элСмСнта listView с Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½ΠΎΠΉ закраской Ρ„ΠΎΠ½Π°. Π—Π°Ρ‚Π΅ΠΌ устанавливаСтся ΠΏΠ°ΠΏΠΊΠ° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ My Documents, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅. ΠœΠ΅Ρ‚ΠΎΠ΄ fillList заполняСт список ListView содСрТимым ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ. Π‘Π°ΠΌ ΠΊΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 7.10.

Листинг 7.10

/// <summary>

/// Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ListView списком ΠΏΠ°ΠΏΠΎΠΊ ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²

/// </summary>

private void fillList() {

 Cursor.Current = Cursors.WaitCursor;

 // ЗаполняСм ListView списком ΠΏΠ°ΠΏΠΎΠΊ ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²

 // Π² Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅

 ListViewItem lvi;

 listView.BeginUpdate();

 listView.Items.Clear();

 // Если Π½Π΅ корнСвая ΠΏΠ°ΠΏΠΊΠ°

 if (path.Length > 1) {

  // ДобавляСм ΠΏΠ°ΠΏΠΊΡƒ "Π’Π²Π΅Ρ€Ρ…"

  lvi = new ListViewItem(UPDIR);

  lvi.ImageIndex = 0;

  listView.Items.Add(lvi);

 }


 // ДобавляСм ΠΏΠ°ΠΏΠΊΠΈ

 string[] dirs = Directory.GetDirectories(path);

 ArrayList list = new ArrayList(dirs.Length);

 for(int i = 0; i < dirs.Length; i++)

  list.Add(dirs[i]);

 list.Sort(new SimpleComparer());

 foreach(string dir in list) {

  lvi = new ListViewItem(Path.GetFileName(dir));

  lvi.ImageIndex = 0;

  listView.Items.Add(lvi);

 }


 // ДобавляСм Ρ„Π°ΠΉΠ»Ρ‹

 string[] files = Directory.GetFiles(path);

 list = new ArrayList(files.Length);

 for(int i = 0; i < files.Length; i++)

  list.Add(files[i]);

 list.Sort(new SimpleComparer());

 foreach(string file in list) {

  lvi = new ListViewItem(Path.GetFileName(file));

  lvi.ImageIndex = 1;

  listView.Items.Add(lvi);

 }

 listView.EndUpdate();

 if (listView.Items.Count > 0) {

  // выдСляСм ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт

  listView.Items[0].Selected = true;

  listView.Items[0].Focused = true;

 }

 Cursor.Current = Cursors.Default;

}

Π˜Ρ‚Π°ΠΊ, посмотрим, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ fillList. ΠŸΠ΅Ρ€Π΅Π΄ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ элСмСнта списком Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π°Π΄ΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ содСрТимоС ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… записСй ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Clear. ПослС очистки списка Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ ΠΏΠ°ΠΏΠΊΠ° ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ. Если ΠΏΠ°ΠΏΠΊΠ° Π½Π΅ корнСвая, Ρ‚ΠΎ Π² список добавляСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΏΠΊΠ° «На ΠΎΠ΄ΠΈΠ½ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ‹ΡˆΠ΅Β». Π—Π°Ρ‚Π΅ΠΌ Π² список Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ всС ΠΏΠ°ΠΏΠΊΠΈ Π² отсортированном порядкС.

ПослС этого наступаСт ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ². Они ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ заносятся Π² список. НаконСц, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт списка выдСляСтся Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ. Π—Π°ΠΎΠ΄Π½ΠΎ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ элСмСнтС устанавливаСтся фокус Π²Π²ΠΎΠ΄Π°. Навигация ΠΏΠΎ ΠΏΠ°ΠΏΠΊΠ°ΠΌ ΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌ осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΈ дополняСтся ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ Action. Код Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 7.11.

Листинг 7.11

/// <summary>

/// Навигация ΠΏΠΎ ΠΏΠ°ΠΏΠΊΠ°ΠΌ ΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌ

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void listView_ItemActivate(object sender, System.EventArgs e) {

 Cursor.Current = Cursors.WaitCursor;

 ListViewItem lvi = listView.Items[listView.SelectedIndices[0]];

 bool isFolder = lvi.ImageIndex == 0;

 if (lvi.Text == UPDIR) {

  path = path.Substring(0,

   path.Substring(0,

   path.Length - 1).LastIndexOf(Path.DirectorySeparatorChar) + 1);

  fillList();

 } else if (isFolder) {

  path += lvi.Text + Path.DirectorySeparatorChar;

  fillList();

 } else

  ShellExecute.Start(path + lvi.Text);

 Cursor.Current = Cursors.Default;

}

ПослС наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ дСйствия ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΏΡƒΠ½ΠΊΡ‚Π΅. Если Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΏΠΊΠ° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° ΠΎΠ΄ΠΈΠ½ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ‹ΡˆΠ΅, Ρ‚ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΡƒΡ‚ΡŒ замСняСтся ΠΏΡƒΡ‚Π΅ΠΌ ΠΊ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅. Если Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΏΠ°ΠΏΠΊΠ°, Ρ‚ΠΎ ΠΏΡƒΡ‚ΡŒ мСняСтся Π½Π° ΠΏΡƒΡ‚ΡŒ ΠΊ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅. Если Π²Ρ‹Π΄Π΅Π»Π΅Π½ Ρ„Π°ΠΉΠ», Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ пытаСтся Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ассоциированной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠΎΠ΄ для ΠΊΠΎΠΌΠ°Π½Π΄ мСню. Для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π’Ρ‹Ρ€Π΅Π·Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 7.12.

Листинг 7.12

private void cutMenuItem_Click(object sender, System.EventArgs e) {

 ListViewItem lvi =

  listView.Items[listView.SelectedIndices[0]];

 clipboardFileName = this.path + lvi.Text;

 clipboardAction = ClipboardAction.Cut;

}

ΠŸΡƒΡ‚ΡŒ ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ сопоставляСтся с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ дСйствиСм. Код, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉΡΡ послС Π²Ρ‹Π±ΠΎΡ€Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 7.13.

Листинг 7.13

private void copyMenuItem_Click(object sender, System.EventArgs e) {

 ListViewItem lvi = listView.Items[listView.SelectedIndices[0]];

 clipboardFileName = path + lvi.Text;

 clipboardAction = ClipboardAction.Copy;

}

Для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ мСню Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ услоТняСтся. Он ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 7.14.

Листинг 7.14

private void pasteMenuItem_Click(object sender, System.EventArgs e) {

 // Если Ρ„Π°ΠΉΠ» сущСствуСт

 string dest = path + Path.GetFileName(clipboardFileName);

 if (File.Exists(dest)) {

  if (MessageBox.Show("Π€Π°ΠΉΠ» ΡƒΠΆΠ΅ сущСствуСт, ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ?", this.Text,

   MessageBoxButtons.YesNo, MessageBoxIcon.Question,

   MessageBoxDefaultButton.Button2) == DialogResult.Yes)

   File.Delete(dest);

  else return;

 }

 // ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ ΠΈΠ»ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ

 string s = path.Substring(0, path.Length - 1);

 switch(clipboardAction) {

 case ClipboardAction.Cut:

  File.Move(clipboardFileName, dest);

  break;

 case ClipboardAction.Copy:

  File.Copy(clipboardFileName, dest, false);

  break;

 }

 clipboardAction = ClipboardAction.None;

 clipboardFileName = string.Empty;

 fillList();

}