|
Программирование >> Автоматически обновляемые приложения
public partial class Forml : Form { public Forml() { InitiaiizeComponent(); TextBoxEx txtNotPaste = new TextBoxEx( txtNotPaste.Parent = this; txtNotPaste.Multiline = true; txtNotPaste.Height = 60; ... и так далее Как видите, мы выполняем наследование от стандартного класса TextBox и запрещаем для унаследованного класса вставку из буфера обмена. Как ввести многострочный текст в текстовое поле программно? Иногда требуется ввести в текстовое поле текст, расположенный в несколько строк. Во-первых, можно установить свойство Multiline в значение true и далее воспользоваться свойством Lines, которое должно содержать массив необходимых строк (листинг 6.23). Листинг 6.23 Создание многострочнрго текста программным способом string[] strWeekDay = { Понедельник , Вторник , Среда }; txtLinesCount.Multiline = true; txtLinesCount.Lines = strWeekDay; A можно воспользоваться комбинацией двух escape-последовательностей \r\n , как показано в листинге 6.24. protected override void WndProc(ref Message m) { Запрещаем обрабатьшать WM PASTE if (m.Msg == WM PASTE) return; base.WndProc(ref m); Используем escape-последовательности для переноса текста на новую строку txtLinesCount.Text = Раз\г\пДва\г\пТри ; В .NET Framework определено специальное свойство System. Environment .NewLine, КОТОрое ЯВЛЯетСЯ аналоГОМ КОмбинацИИ ЭТИХ последовательностей. Использование этого свойства предпочтительнее, так как код становится более платформонезависимым (листинг 6.25). \ Листинг 6.25. Третий способ создания многострочного текста Используем свойство NewLine для переноса строк txtLinesCount.Text = Месяцы года: + Environment.NewLine + Декабрь + Environment.NewLine + Январь... ; Как сделать так, чтобы символы вводились в нужном регистре? я помню, что для решения этой задачи на Visual Basic 5.0 мне приходилось писать собственную процедуру, которая занималась конвертацией вводимых символов в нужный регистр. Теперь у текстовых полей есть свойство charactercasing, которое позволяет решить эту проблему одной строчкой кода (листинг 6.26). Листинг 6.26. Ввод символов в верхнем регистре Все вводимые символы переводятся в верхний регистр this.textBoxl.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper; Как избавиться от звукового сигнала при нажатии на клавишу ввода? Когда вы нажимаете на клавишу <Enter> при наборе текста в текстовом поле, то слышен щелчок, издаваемый системным динамиком. Если вы хотите изба- \ Листинг 6.24. Создание многострочного текста при помощи escape-последовательностей \ Листинг 6.27. Избавление от звукового сигнала при нажатии на клавишу <Enter> private void textBoxl KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)13) e.Handled = true; else base.OriKeyPress(e); В листинге 6.27 показан пример для отдельного текстового поля. Если вы хотите применить этот способ ко многим текстовым полям, то проще определить новый класс наследованием от TextBox и переопределить событие OnKeyPress (ЛИСТИНГ 6.28). ; Листинг 6.28. ПереоПэеделение события OnKeyPress public class MyTextBox : TextBox { protected override void OnKeyPress(KeyPressEventArgs e) { if(e.KeyChar == (char) 13) e.Handled = true; else base.OnKeyPress (e); Как выделить текст программным способом? Например, если в вашей программе осуществляется поиск определенной строки в текстовом поле, то вьщеление найденного текста привлечет внимание пользователя. Чтобы выделить текст программными средствами, нужно присвоить свойству seiectionstart значение, соответствующее начальной позиции текста, который вам требуется выделить. При этом крайняя левая позиция текста имеет значение 0. Если значение свойства seiectionstart больше или равно числу знаков в текстовом поле, то курсор помещается за виться от этого звука, то вам необходимо перехватить нажатие этой клавиши, как делается в листинге 6.27.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |