Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Подключение функциональности Go To к основному окну




  • Подключите диалоговое окно Go To к обработчику главного окна в файле Edit.cs (для удобства код файла приводится полностью)
using System; using System.Collections.Generic; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace Notepad1{ partial class Window1 { //------------------------------------------------------ // // Обработчики источников задач Edit // //------------------------------------------------------ private void UndoOnExecute(object sender, RoutedEventArgs e) { txtBox1.Undo(); } private void RedoOnExecute(object sender, RoutedEventArgs e) { txtBox1.Redo(); } private void CutOnExecute(object sender, RoutedEventArgs e) { txtBox1.Cut(); // Вариант //Clipboard.SetText(txtBox1.SelectedText); //txtBox1.SelectedText = " "; } private void CopyOnExecute(object sender, RoutedEventArgs e) { txtBox1.Copy(); // Вариант //Clipboard.SetText(txtBox1.SelectedText); } private void PasteOnExecute(object sender, RoutedEventArgs e) { // Если в буфере содержатся данные текстового формата if (Clipboard.ContainsText()) txtBox1.Paste(); } private void DeleteOnExecute(object sender, RoutedEventArgs e) { txtBox1.SelectedText = String.Empty; } private void FindOnExecute(object sender, RoutedEventArgs e) { CreateDialog(); } private void FindNextOnExecute(object sender, RoutedEventArgs e) { if (_dlg == null) CreateDialog(); else FindNextExec(); } private void ReplaceOnExecute(object sender, RoutedEventArgs e) { if (_dlg == null) { CreateDialog(); _dlg.ShowReplace = true; } else if (_dlg.ShowReplace == false) _dlg.ShowReplace = true; else ReplaceExec(); } #region Задача Go To private void GoToOnExecute(object sender, RoutedEventArgs e) { GoToDialog dlg = new GoToDialog(); dlg.Owner = this; dlg.LineNumber = CaretLineNumber; /***** Врет для завернутых строк Word Wrap! ****************** dlg.MaxLineNumber = txtBox1.LineCount; /*************************************************************/ dlg.MaxLineNumber = GetMaxNumber(); // Параметры анонимного обработчика " от фонаря", // все равно не используем dlg.GotoActivate += delegate(object sender2, EventArgs e2) { // Заполняем текстовое поле диалога текущей строкой dlg.LineNumber = CaretLineNumber; }; // Запускаем в модальном режиме. Ждет и закрывается if (dlg.ShowDialog() == true) { // Устанавливаем каретку (курсор) в начало строки CaretLineNumber = dlg.LineNumber; } txtBox1.Focus(); } int GetMaxNumber() { int count = 0; int pos = 0; int caretPos = txtBox1.Text.Length + 1; while (pos < caretPos) { count++; // Счетчик строк pos = txtBox1.Text.IndexOf(" \r\n", pos); if (pos! = -1) // Нашли очередную пару pos += 2; // Сдвигаемся правее найденных else break; // Больше нет } return count; } int CaretLineNumber { get { /***** Врет для завернутых строк Word Wrap! ****************** int caretPos = txtBox1.SelectionStart; return (txtBox1.GetLineIndexFromCharacterIndex(caretPos) + 1); /*************************************************************/ int count = 0; int pos = 0; int caretPos = txtBox1.SelectionStart + 1; //txtBox1.CaretIndex while (pos < caretPos) { count++; // Счетчик строк pos = txtBox1.Text.IndexOf(" \r\n", pos); // \n - перевод строки if (pos! = -1) // Нашли очередную пару pos += 2; // Сдвигаемся правее найденных else break; // Больше нет } return count; } set { value = value - 1; int count = 0; int pos = 0; while (count < value) // Пока не превышает заданную { pos = txtBox1.Text.IndexOf(" \r\n", pos); // \r - возврат каретки if (pos! = -1) // Нашли очередную пару { count++; // Счетчик строк pos += 2; // Сдвигаемся правее найденных } else { pos = txtBox1.Text.Length; break; } } // Позиционируем курсор txtBox1.SelectionStart = pos; txtBox1.SelectionLength = 0; } } #endregion Задача Go To private void SelectAllOnExecute(object sender, RoutedEventArgs e) { txtBox1.SelectAll(); } }}
  • Запустите проект и испытайте введенную функциональность Go To. Разберитесь с кодом

Данная страница нарушает авторские права?





© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.