Программирование >>  Автоматически обновляемые приложения 

1 ... 50 51 52 [ 53 ] 54 55 56 ... 170


Текстовые поля (TextBox)

Подсчет числа строк

в многострочном текстовом поле

у многострочного текстового поля (Multiline == true)СВОЙСТВО Lines ВОЗ-

вращает массив строк в текстовом поле без учета переноса слов, которые не умещаются по ширине поля. Поэтому, если установить у свойства wordwrap значение true, то свойство Lines не сможет правильно посчитать число строк текста, так как учитывает только строки, разделенные специальным символом переноса строки (возврат каретки). В этом случае можно воспользоваться сообщением emgetlinescount. Рассмотрим на примере (листинг 6.18), как именно это сделать. Создадим текстовое поле и поместим туда какую-нибудь длинную строку, а также сразу установим значения свойств Multiline и Wordwrap В true. Также поместим На форму кнопку, с помощью которой пользователь сможет узнать число строк в текстовом поле.

Листинг 6.18. Подсчет строк в многострочном текстовом поле

using System.Runtime.InteropServices; [Dlllmport( user32.dll )]

public static extern int SendMessage(IntPtr hWnd, UInt32 Msg, UInt32 wParam, UInt32 IParam);

const int EM GETLINECOUNT = OxOOBA;

private void Forml Load(object sender, EventArgs e) {

txtLinesCount.Multiline = true; txtLinesCount.Wordwrap = true; txtLinesCount.Height = 98;

txtLinesCount.Text += У Лукоморья дуб зеленый; txtLinesCount.Text += Златая цепь на дубе том: txtLinesCount.Text += И днем и ночью кот ученый

Примечание

Примеры работы с СотЬоВох находятся в папке ComboBoxDemo на прилагаемом диске.



Фильтрация заданных символов при вводе с клавиатуры

Можно не допустить ввод нежелательных символов с клавиатуры, обрабатывая событие Keypress. Для ЭТОГО нужно обработать нажатую клавишу при помощи свойства KeyChar класса KeyPressEventArgs. Например, мы не хотим, чтобы пользователь мог вводить символ Б и нажимать на клавишу <Enter>. В этом случае подойдет код, приведенный в листинге 6.19.

; Листинг 6.19. Фильтруем вводимые символы

private void textBoxl KeyPress(object sender.

System.Windows.Forms.KeyPressEventArgs e)

if(e.KeyChar == (char)13 e.KeyChar == B) e.Handled = true;

Немного модифицируем пример, чтобы позволить вводить в текстовое поле только цифры (листинг 6.20).

; Листинг 6.20. Разрешение на ввод только цифр

if С Char.IsDigit(е.KeyChar) ) е.Handled = true;

Еще улучшим наш пример. Допустим, мы хотим произвести фильтрацию ввода данных по определенному шаблону. Для конкретности предположим, что мы хотим разрешить пользователю вводить не только цифры, но и знаки

txtLinesCount.Text += Все ходит по цепи кругом ;

private void butCount Click(object sender, EventArgs e) {

mt LineCount;

LineCount = SendMessage(txtLinesCount.Handle, EM GETLINECOUNT, 0, 0); MessageBox.Show( Число строк: + LineCount);



по шаблону разрешаем вводить в поле цифры, знаки плюс, минус и запятую string pattern = 0123456789+-, ;

if ( Char.IsControl(e.KeyChar))

if (pattern.IndexOf(e.KeyChar.ToString0) < 0) e.Handled = true;

Как заблокировать контекстное меню в текстовом поле?

Если вам необходимо заблокировать для пользователя возможность воспользоваться стандартным контекстным меню, то просто создайте пустое контекстное меню следующим образом:

textBoxl.ContextMenu = new ContextMenu();

Надо отметить, что при этом буфер обмена Windows по-прежнему работает, и опытный пользователь может выполнить стандартные операции копирования, вставки текста с помощью быстрых клавиш.

Запрет вставки текста

из буфера обмена Windows

Мы знаем, как заблокировать контекстное меню у текстового поля, чтобы пользователь не мог редактировать текст. Но, как же все-таки запретить вставку текста из буфера обмена? Вставка из буфера обмена осуществляется при помощи сообщения wmpaste, поэтому нам надо отловить это сообщение в процедуре wndProc и отменить его (листинг 6.22).

; Листинг 6.22. Запрет на вставку из буфера обмена

class TextBoxEx : TextBox {

const mt WM PASTE = 0x0302;

плюс, минус и запятую. В этом случае мы создаем шаблон разрешенных символов и при вводе проверяем, входит ли данный символ в заданный шаблон (листинг 6.21).

] Листинг 6.21. Ввод символов по заданному шаблону



1 ... 50 51 52 [ 53 ] 54 55 56 ... 170

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика