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

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

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

private void textBox1_KeyUp(object sender, KeyEventArgs e) {

 if (e.KeyCode == Keys.Enter) textBox2.Focus();

}


private void textBox2_KeyUp(object sender, KeyEventArgs e) {

 if (e.KeyCode = Keys.Enter) textBox3.Focus();

}


private void textBox3_KeyUp(object sender, KeyEventArgs e) {

 if (e.KeyCode == Keys.Enter) textBox1.Focus();

}

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ полосой ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ

ΠŸΡ€ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ большого тСкста ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ полосу ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ для пСрСмСщСния ΠΏΠΎ тСксту. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сообщСниС WM_VScroll для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ управлСния полосой ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для создания эффСкта автоматичСской ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ тСкста.

Для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ тСкстовоС ΠΏΠΎΠ»Π΅ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π² Π½Π΅ΠΌ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ тСкст. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΡ‚Ρ€Ρ‹Π²ΠΎΠΊ ΠΈΠ· произвСдСния А. ΠŸΡƒΡˆΠΊΠΈΠ½Π° «Дубровский». Π’Π°ΠΊΠΆΠ΅ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ Π½Π°Π΄ΠΎ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ смоТСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ тСкста, прокручивая Π΅Π³ΠΎ Π½Π° ΠΎΠ΄Π½Ρƒ строчку ΠΈΠ»ΠΈ страницу Π²Π½ΠΈΠ· ΠΈ Π²Π²Π΅Ρ€Ρ…. Π’ листингС 4.2 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ описанный способ отобраТСния тСкста.

Листинг 4.2

[DllImport("coredll.dll")]

extern static int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);


/// <summary>

/// Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Windows для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с полосой ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ

/// </summary>

const int WM_VSCROLL = 0x115;


// константы для сообщСния WM_VSCROLL

const int SB_LINEUP = 0:

const int SB_LINEDOWN = 1;

const int SB_PAGEUP = 2;

const int SB_PAGEDOWN = 3;


private void Form1_Load(object sender, EventArgs e) {

 // ΠžΡ‚Ρ€Ρ‹Π²ΠΎΠΊ ΠΈΠ· повСсти А.Π‘.ΠŸΡƒΡˆΠΊΠΈΠ½Π° "Дубровский"

 txtBook.Text = @"НСсколько Π»Π΅Ρ‚ Ρ‚ΠΎΠΌΡƒ Π½Π°Π·Π°Π΄ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· своих

 ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΠΉ ΠΆΠΈΠ» старинный русский Π±Π°Ρ€ΠΈΠ½, ΠšΠΈΡ€ΠΈΠ»Π° ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²ΠΈΡ‡ Π’Ρ€ΠΎΠ΅ΠΊΡƒΡ€ΠΎΠ².

 Π•Π³ΠΎ богатство, Π·Π½Π°Ρ‚Π½Ρ‹ΠΉ Ρ€ΠΎΠ΄ ΠΈ связи Π΄Π°Π²Π°Π»ΠΈ Π΅ΠΌΡƒ большой вСс Π² губСрниях,

 Π³Π΄Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈΠ΅. БосСди Ρ€Π°Π΄Ρ‹ Π±Ρ‹Π»ΠΈ ΡƒΠ³ΠΎΠΆΠ΄Π°Ρ‚ΡŒ малСйшим Π΅Π³ΠΎ

 ΠΏΡ€ΠΈΡ…отям; губСрнскиС Ρ‡ΠΈΠ½ΠΎΠ²Π½ΠΈΠΊΠΈ Ρ‚Ρ€Π΅ΠΏΠ΅Ρ‚Π°Π»ΠΈ ΠΏΡ€ΠΈ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ; ΠšΠΈΡ€ΠΈΠ»Π°

 ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²ΠΈΡ‡ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π» Π·Π½Π°ΠΊΠΈ подобострастия ΠΊΠ°ΠΊ Π½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΡƒΡŽ дань; Π΄ΠΎΠΌ Π΅Π³ΠΎ

 Π²ΡΠ΅Π³Π΄Π° Π±Ρ‹Π» ΠΏΠΎΠ»ΠΎΠ½ гостями, Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ Ρ‚Π΅ΡˆΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π±Π°Ρ€ΡΠΊΡƒΡŽ ΠΏΡ€Π°Π·Π΄Π½ΠΎΡΡ‚ΡŒ,

 Ρ€Π°Π·Π΄Π΅Π»ΡΡ ΡˆΡƒΠΌΠ½Ρ‹Π΅, Π° ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈ Π±ΡƒΠΉΠ½Ρ‹Π΅ Π΅Π³ΠΎ увСсСлСния.";

}


private void butUp_Click(object sender, EventArgs e) {

 // Π½Π° ΠΎΠ΄Π½Ρƒ строчку Π²Π²Π΅Ρ€Ρ…

 SendMessage(txtBook.Handle, WM_VSCROLL, SB_LINEUP, 0);

}


private void butDown_Click(object sender, EventArgs e) {

 // Π½Π° ΠΎΠ΄Π½Ρƒ строчку Π²Π½ΠΈΠ·

 SendMessage(txtBook.Handle, WM_VSCROLL, SB_LINEDOWN, 0);

}


private void butPageUp_Click(object sender, EventArgs e) {

 // Π½Π° ΠΎΠ΄Π½Ρƒ страницу Π²Π²Π΅Ρ€Ρ…

 SendMessage(txtBook.Handle, WM_VSCROLL, SB_PAGEUP, 0);

}


private void butPageDown_Click(object sender, EventArgs e) {

 // Π½Π° ΠΎΠ΄Π½Ρƒ страницу Π²Π½ΠΈΠ·

 SendMessageCtxtBook.Handle, WM_VSCROLL, SB_PAGEDOWN, 0);

}

Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Π²ΠΈΠ΄ прилоТСния ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° рис. 4.1.

Рис. 4.1. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠ° тСкста

ΠœΠ½ΠΎΠ³ΠΎΡΡ‚Ρ€ΠΎΡ‡Π½Ρ‹ΠΉ тСкст Π² ΠΊΠ½ΠΎΠΏΠΊΠ΅

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ тСкст для ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ строку. Но ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ этот ΡΡ‚ΠΈΠ»ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ GetWindowLong ΠΈ SetWindowLong, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² листингС 4.3.


Листинг 4.3

[DllImport("coredll.dll")]

private static extern IntPtr GetCapture();


[DllImport("coredll.dll")]

private static extern int GetWindowLong(IntPtr hWnd, int nIndex);


[DllImport("coredll.dll")]

private static extern int SetWindowLong(IntPtr hWnd, int nIndex,

 int dwNewLong);


public const int GWLSTYLE = -16;


// ΡΡ‚ΠΈΠ»ΡŒ многострочного тСкста

public const int BS_MULTILINE = 0x2000;


private void Form1_Load(object sender, EventArgs e) {

 IntPtr hWnd;

 int style;

 this.butMultiline.Capture = true;

 hWnd = GetCapture();

 this.butMultiline.Capture = false;

 style = GetWindowLong(hWnd, GWL_STYLE);

 SetWindowLong(hWnd, GWL_STYLE, style | BS_MULTILINE);

}

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для сравнСния использовались Π΄Π²Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ. На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ достаточно Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ тСкст (рис. 4.2).

Рис. 4.2. Π’ΠΈΠ΄ ΠΊΠ½ΠΎΠΏΠΎΠΊ Π² процСссС программирования

ΠŸΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ выполняСтся ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ стиля для ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ butMultiline, Π° вторая ΠΊΠ½ΠΎΠΏΠΊΠ° остаСтся Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ПослС запуска прилоТСния ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ тСкст Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠ΅ разбиваСтся Π½Π° Π΄Π²Π΅ строки ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ умСщаСтся Π² Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ… ΠΊΠ½ΠΎΠΏΠΊΠΈ. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠ΅ слова ΠΎΠ±Ρ€Π΅Π·Π°ΡŽΡ‚ΡΡ, ΠΈ тСкст просто нСльзя ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ (рис. 4.3).

Рис. 4.3. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ многострочного тСкста Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅

Π’ΠΠ˜ΠœΠΠΠ˜Π•

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±Ρ‹Π» написан Π΅Ρ‰Π΅ для .NET Compact Framework 1.0. Π’ .NET Compact Framework 2.0 Π½Π΅Ρ‚ надобности Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ GetCapture() для получСния дСскриптора hWnd, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ поддСрТиваСтся свойство Control.Handle.

Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΡˆΠΈΡ€ΠΈΠ½Ρ‹ Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ списка ComboBox

Π’Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ список Ρƒ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Ρ€Π°Π²Π΅Π½ ΡˆΠΈΡ€ΠΈΠ½Π΅ самого ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ComboBox. Но ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ нСуправляСмого ΠΊΠΎΠ΄Π°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² листингС 4.4.

Листинг 4.4

/// <summary>

/// Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π΅Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ списка

/// ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°

/// </summary>

const int CB_GETDROPPEDWIDTH = 0x015f;


/// <summary>

/// Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ списка

/// ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°

/// </summary>

const int CB_SETDROPPEDWIDTH = 0x0160;


[DllImport("coredll.dll")]

static extern int SendMessage(IntPtr hwnd, int msg, int wParam, int lParam);


private void Form1_Load(object sender, EventArgs e) {

 comboBox1.Items.Add("Π Π°Π·");

 comboBox1.Items.Add("Π”Π²Π°");

 comboBox1.Items.Add("Π’Ρ€ΠΈ");


 comboBox2.Items.Add("Π”Π»ΠΈΠ½Π½Ρ‹ΠΉ тСкст");

 comboBox2.Items.Add("ΠžΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ тСкст");

 comboBox2.Items.Add("Hy ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ тСкст");

 // УстанавливаСм ΠΆΠ΅Π»Π°Π΅ΠΌΡƒΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρƒ

 SendMessage(comboBox2.Handle, CB_SETDROPPEDWIDTH, 200, 0);


 // ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡˆΠΈΡ€ΠΈΠ½Ρƒ Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½Π°

 int retval = SendMessage(comboBox2.Handle, CB_GETDROPPEDWIDTH, 0, 0);

 this.Text = retval.ToString();

}

На Ρ„ΠΎΡ€ΠΌΠ΅ Π½Π°Π΄ΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΄Π²Π° элСмСнта ComboBox. Один ΠΈΠ· Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ стандартным. А Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сообщСниС CB_SETDROPPEDWIDTH со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° 200. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ список Π±ΡƒΠ΄Π΅Ρ‚ Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ 200 пиксСлов.

ПослС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ сначала Π½Π°Π΄ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° (рис. 4.4). Оно Π²Π΅Π΄Π΅Ρ‚ сСбя стандартным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Рис. 4.4. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ списка

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ. Π£ Π½Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ списка увСличился, Ρ‡Ρ‚ΠΎ позволяСт ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ вСсь тСкст (рис. 4.5).

Рис. 4.5. Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ списка Ρƒ ComboBox

ListBox

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ ListBox ΠΈΠΌΠ΅Π΅Ρ‚ мноТСство возмоТностСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΊΠ° Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ .NET Compact Framework. Π’ частности, Π΄Π°Π½Π½Ρ‹ΠΉ элСмСнт Π½Π΅ позволяСт ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ поиск элСмСнтов ΠΏΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ символам. Но для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сообщСниС LB_FINDSTRING.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ тСстовоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½Π° Ρ„ΠΎΡ€ΠΌΡƒ список ListBox ΠΈ тСкстовоС ΠΏΠΎΠ»Π΅ TextBox. Π’Π°ΠΊΠΆΠ΅ потрСбуСтся ввСсти ΠΊΠΎΠ΄, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π² листингС 4.5.

Листинг 4.5

const int LB_FINDSTRING = 0x018F;

const int LB_FINDSTRINGEXACT = 0x01A2;


[DllImport("coredll.dll")]

static extern int SendMessage(IntPtr hwnd, int msg,

 int wParam, string lParam);


private void textBox1_TextChanged(object sender, EventArgs e) {

 //поиск строки ΠΏΠΎ Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ символам

 listBox1.SelectedIndex =

  SendMessage(listBox1.Handle, LB_FINDSTRING, -1, textBox1.Text);

}


private void Form1_Load(object sender. EventArgs e) {

 listBox1.Items.Add("bank");

 listBox1.Items.Add("banana");

 listBox1.Items.Add("ball");

 listBox1.Items.Add("bounty");

 listBox1.Items.Add("bar");

}

ПослС запуска ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ввСсти Π² тСкстовом ΠΏΠΎΠ»Π΅ любоС слово. Если Π² спискС Π΅ΡΡ‚ΡŒ слова, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… символов, Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π°Ρ‡Π½ΡƒΡ‚ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒΡΡ Π² спискС. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ сначала ввСсти символ b, Π·Π°Ρ‚Π΅ΠΌ a ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, l. Π‘Π½Π°Ρ‡Π°Π»Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ слово bank, Π° послС Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ символа Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ Π½Π° слово ball.

БущСствуСт Ρ‚Π°ΠΊΠΆΠ΅ сообщСниС LB_FINDSTRINGEXACT, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ осущСствляСт поиск ΠΏΠΎ Ρ†Π΅Π»ΠΎΠΌΡƒ слову Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° рСгистра. Π˜ΠΌΠ΅Π΅Ρ‚ смысл ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ, ΠΊΠΎΠ³Π΄Π° список содСрТит сотни записСй ΠΈ отыскиваниС Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ слова становится ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ занятиСм. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ этого сообщСния, Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΈ ввСсти ΠΊΠΎΠ΄, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π² листингС 4.6.