|
Программирование >> Автоматически обновляемые приложения
Текстовые поля (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. Ввод символов по заданному шаблону
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |