Создаем Блокнот на C# (Си Шарп)

Просмотров: 15872Комментарии: 0
ПрограммированиеC#
Создаем Блокнот на C# (Си Шарп)

С недавнего времени появилось много народу желающие обучится программированию. Сегодня мы попробуем написать простой блокнот для платформы Windows Mobile. Для этого нам понадобится программа Visual Studio 2005/2008. Версия Экспресс и 2010 не подойдет для нашей задачи, так как не поддерживают смарт-устройства. Создадим простой Блокнот на C# (Си Шарп).

При установке нужно проверить, что включена поддержка смарт-устройств. На момент написания статьи у меня была программа Visual Studio 2008 SP1. Также я установил Windows Mobile 6.5 SDK, так как в стандартном наборе SDK версия для старой платформы.

Задача:

1) Форма с текстовым полем на всю площадь.

2) Левая софт-клавиша "Меню" с пунктами: "Новый", "Открыть", "Сохранить", "Сохранить как" и "Выход".

2.1) "Новый": должен очищать текст в редакторе. Если есть несохранённые данные, то сначала выдать запрос на подтвеждение (Да/Нет).

2.2) "Открыть": открытие файла через стандартный диалог открытия файла, загрузка его содержимого в текстовое поле. Запрос как и в 2.1.

2.3) "Сохранить": сохранение открытого файла, если файл новый (не открытый), то выдать стандартный диалог сохранения файла.

2.4) "Сохранить как": сохранение файла через стандартый диалог сохранения файла.

2.5) "Выход": закрытие программы. Запрос как в 2.1.

3) Программа должна отлично себя вести на всех разрешениях экранов, включая ландшафтные.

Решение:

После запуска VS2008, создаем проект, выбираем тип проекта C# - Смарт устройство.

Устанавливаем на форму компоненты:

mainMenu1 (Меню),

openFileDialog1 (Диалог открытия),

saveFileDialog1 (диалог сохранения).

А также основной компонент textBox1 и устанавливаем для него свойство Dock: Fill, чтобы растянуть его на всю форму.

В компонент mainMenu1 добавляем следующие пункты меню "Меню" с вложенными подменю "Новый, Открыть, Сохранить, Сохранить как, О программе, Выход".

Форма проекта

Переходим к коду проекта. Видим примерно следующее:

using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace SmartDeviceProject1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}

В список библиотек дописываем using System.IO; для того, чтобы наше приложение могло работать с файлами на устройстве.

После инициализации формы:

public Form1()
{
      InitializeComponent();
}

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

//Новый файл
private void menuItem2_Click(object sender, EventArgs e)
{
    //Вызов функции Saved
    Saved(); 
    textBox1.Text = "";
    fname = "";
}

Вставляем обаботчик нажатия на пункт "Открыть". Который также вызывает функцию вопроса о сохранении, чтобы сохранить предыдущий файл и диалог открытия файла.

//Открытие файла
private void menuItem3_Click(object sender, EventArgs e)
{
    Saved();
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        try
        {
            using (StreamReader sr = new StreamReader(openFileDialog1.FileName))
            {
                textBox1.Text = sr.ReadToEnd();
                sr.Close();
                fname = openFileDialog1.FileName;
            }
        }
        catch
        {
            MessageBox.Show("Ошибка: Невозможно прочитать файл.");
        }
     }
     filechanged = false; //Файл не изменен
}

Также вещаем обработчики на пункты "Сохранить", "Сохранить как" и "Выход". TextChanged функция для хранения пометки о изменении файла

//Сохранить
private void menuItem4_Click(object sender, EventArgs e)
{
    //Вызов функции сохранения с именем файла, 
    //чтобы не появлялся диалог сохранения
    MySaveFile(fname);
}
//Сохранить как
private void menuItem5_Click(object sender, EventArgs e)
{
    //Вызов функции сохранения без имени файла,
    //чтобы диалог о сохранения появился
    MySaveFile("");
}
//Выход
private void menuItem6_Click(object sender, EventArgs e)
{
    Saved();//Вопрос о сохранении
    Close();//Выход из приложения
}
//Пометка изменения файла
private void textBox1_TextChanged(object sender, EventArgs e)
{
    //Ставим пометку о изменении файла
    if (!filechanged) filechanged = true;
}

Функции сохранения

 

//Сохранение файла
private void MySaveFile(string FileName)
{
    //Если переменная с именем файла пустая
    //то вызываем диалог сохранения файла
    if (FileName == "")
    {
        if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        {
           FileName = saveFileDialog1.FileName;
        }
    }
    try
    {
        using (StreamWriter sw = new StreamWriter(FileName))
        {
            sw.Write(textBox1.Text);
        }
        fname = FileName;
        filechanged = false;
    }
    catch
    {
        MessageBox.Show("Ошибка: Невозможно сохранить файл.");
    }
}
//Вопрос сохранения файла
private void Saved()
{
    //Если файл был изменен, то выводим вопрос о сохранении файла
    if (filechanged)
    {
         DialogResult res = MessageBox.Show("Сохранить изменения в файле?", "Сохранение файла", 
         MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
         if (res == DialogResult.Yes)
         {
             //При положительном ответе вызываем сохранение
             MySaveFile(fname);
         }
     }
}

А также при неоходимости функция показа информации о программе

//О программе
private void menuItem7_Click(object sender, EventArgs e)
{
   MessageBox.Show("Блокнот v1.0 by LeGioN", "О программе", MessageBoxButtons.OK,
   MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
}

Обработчики пунктов меню нужно повесить в компоненте mainMenu на соответствующие пункты.

Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

     

  

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

(обязательно)