public static bool IsText() {
try {
return IsClipboardFormatAvailable(CF_UNICODETEXT);
} catch (Exception ex) {
MessageBox.Show('He могу понять, что содержится в буфере обмена!');
return false;
}
}
private void mnuEdit_Popup(object sender, EventArgs e) {
if (IsText())
mnuPaste.Enabled = true;
else
mnuPaste.Enabled = false;
}
Подобные изменения надо сделать и для пунктов меню. Если пользователь не выделил часть текста, то пункты Вырезать
, Копировать
и Удалить
также должны быть заблокированы. Код, реализующий эту функциональность, приведен в листинге 7.35.
//Если текст выделен
if (txtEditor.SelectionLength > 0) {
mnuCut.Enabled = true;
mnuCopy.Enabled = true;
mnuDelete.Enabled = true;
} else {
mnuCut.Enabled = false;
mnuCopy.Enabled = false;
mnuDelete.Enabled = false;
}
Следующим шагом в развитии программы будет добавление файловых операций. Работа с текстовым редактором предполагает не только правку текста, но и сохранение текста в файле, а также чтение данных из файла. Для этого в меню создаются соответствующие команды Создать
, Открыть
, Сохранить
и Сохранить как
. Код, связанный с этими командами, приведен в листинге 7.36.
private void mnuOpen_Click(object sender, EventArgs e) {
dlgOpenFile.Filter = 'Текстовые документы (*.txt)|*.txt|Все файлы |*.*';
dlgOpenFile.ShowDialog();
if (File.Exists(dlgOpenFile.FileName)) {
fname = dlgOpenFile.FileName;
StreamReader sr =
new StreamReader(fname, System.Text.Encoding.GetEncoding('Windows-1251'), false);
txtEditor.Text = sr.ReadToEnd();
flag = false;
sr.Close();
}
}
private void mnuSaveAs_Click(object sender, EventArgs e) {
SaveFileDialog dlgSaveFile = new SaveFileDialog();
dlgSaveFile.Filter = 'Текстовые документы (*.txt)|*.txt|Все файлы |*.*';
dlgSaveFile.ShowDialog(); fname = dlgSaveFile.FileName;
savedata();
}
private void savedata() {
if (fname == '') {
SaveFileDialog dlgSaveFile = new SaveFileDialog();
dlgSaveFile.Filter = 'Текстовые документы (*.txt)|*.txt|Все файлы|*.*';
DialogResult res = dlgSaveFile.ShowDialog();
if (res == DialogResult.Cancel) {
return;
}
fname = dlgSaveFile.FileName;
MessageBox.Show(fname);
}
StreamWriter sw =
new StreamWriter(fname, false, System.Text.Encoding.GetEncoding('Windows- 1251'));
sw.WriteLine(txtEditor.Text);
sw.Flush();
sw.Close();
flag = false;
}
private void mnuSave_Click(object sender, EventArgs e) {
savedata();
}
private void txtEditor_TextChanged(object sender, EventArgs e) {
flag = true;
}
Работа с файлами в .NET Compact Framework не отличается от методов работы с файлами в полной версии .NET Framework, поэтому заострять внимание на этом коде не нужно. Осталось только добавить в программу некоторые детали, которые придают программе профессиональный вид. Нужно присоединить собственную пиктограмму приложения, а также добавить диалоговое окно О программе
с упоминанием автора программы и логотипом фирмы. Безусловно, вы можете наделить текстовый редактор новыми возможностями или расширить его функциональность. Например, для сохранения и открытия файлов я использовал стандартные диалоговые окна, которые работают с файлами в пределах папки Мои документы
. Но используя код ранее созданного файлового менеджера, можно научить приложение сохранять и открывать файлы в любом месте файловой системы. Также можно доработать меню Формат
, позволяющее работать с различными кодировками текста.