Как я уже писал, статья разбита на части:
В предыдущих частях я описывал:
- как создать проект в Visual Studio (часть 1).
В этой, я хочу рассказать:
Как открыть текстовый файл и файл RTF
Значит, мы создали новый проект, добавили на форму RichTextBox1, OpenFileDialog1, SaveFileDialog1, Button1 и Button2.
Для удобства, понятности и красоты кода дадим им новые имена:
RTB, OFD, SFD, butOpen, butSave
Чтобы присвоить новое имя любому элементу управления нужно в режиме Конструктора нажать на элемент и зайти в его свойства или нажать F4 (другие способы описаны в части 1) и свойству Name присвоить другое значение. На Рис.1. элементу управления RichTextBox1 я даю имя RTB.
![]() |
Рис. 1. Изменение свойства Name у элемента управления |
Дальше продолжим то, что начали в первой части статьи, а именно, кликнули 2 раза по кнопке butOpen. Тем самым вошли в модуль формы, чтобы написать процедуру обработки события Click этой самой кнопки. Это означает, что если пользователь нажмет на эту кнопку, то начнет выполняться эта процедура.
Это кнопка открытия файла, а значит код процедуры должен открывать текстовый файл.
Private Sub butOpen_Click(sender As Object, e As EventArgs) Handles butOpen.Click
Dim FilePath As String
If OFD.ShowDialog() = DialogResult.OK Then 'если пользователь выбирает файл для открытия
FilePath = OFD.FileName 'путь к файлу
'вариант 1
RTB.Text = My.Computer.FileSystem.ReadAllText(FilePath)
'вариант 2
RTB.Lines = IO.File.ReadAllLines(FilePath)
'вариант 3
RTB.Text = IO.File.ReadAllText(FilePath)
'вариант 4
Dim SR As New IO.StreamReader(FilePath)
RTB.Text = SR.ReadToEnd
End If
End Sub
|
Здесь я навел 4 варианта. Понятно, что оставить нужно только 1 из них, какой душе угодно.
Я обычно использую вариант 3. Он универсален и самый краткий в плане количества символов кода.
Это то, что касается обычных текстовых файлов. Под текстовыми файлами я подразумеваю не файлы с расширением *.txt, а все файлы, которые содержат в себе только текст, без картинок, выделений цветом, фона, выравниваний и т.д.
В коде наше открытие файла мы заключили в условие:
If OFD.ShowDialog() = DialogResult.OK Then
Это нужно для того, чтобы в том случае, если пользователь в открывшемся OFD нажмет отмена или закроет OFD - не словить ошибку. То же самое будем делать c SFD при сохранении файла, т.к. там ошибка возникает, если имя файла пустое, а если заполненое, даже если пользователь нажмет отмена, то SFD все равно сохранит файл, что вообще противоречит логике работы программы.
О RTF файлах. Это формат "богатого" текста. С точки зрения пользователя - это может быть обычный текстовый документ, где текст красиво оформлен: есть выравнивания, выделение цветом, присутствуют изображения и т.д. Как это выглядит с точки зрения программиста можно убедиться, создав любой RTF документ в стандартной программе WordPad или MS Word, затем запустить наш блокнот, нажать кнопку Open и увидеть что-то такое (Рис. 2):
![]() |
Рис.2. RTF-файл открыт как обычный текст |
Бред какой-то, да? Нет, не бред, а мета-теги. Они служат для того, чтобы рассказать программе, как нужно расположить текст, выделить его, разукрасить.
Программе то хорошо, а если не хорошо, то все равно, что там открывается и как оно показывается. Как нам увидеть наш файл с точки зрения пользователя? Как преобразовать эти чудные мета-теги нормальный, человеческий вид? Очень просто, даже проще, чем вы думаете. У RTB есть один хороший метод LoadFile(). Приведу сначала весь текст программы, а потом объясню.
Imports System.IO
Public Class Form1
Private Sub butOpen_Click(sender As Object, e As EventArgs) Handles butOpen.Click
Dim FilePath As String
If OFD.ShowDialog() = DialogResult.OK Then 'если пользователь выбирает
файл для открытия
FilePath = OFD.FileName 'путь к файлу
Dim FileExt = LCase(Path.GetExtension(FilePath)) 'расширение файла
If FileExt = ".txt" Then
RTB.Text = File.ReadAllText(FilePath)
ElseIf FileExt = ".rtf" Then
RTB.LoadFile(FilePath)
End If
End If
End Sub
End Class
|
Пояснения:
Первой строкой я импортирую пространство имен System.IO. Это делается для того, чтобы сократить и улучшить читаемость кода.
Теперь вместо:
System.IO.Path.GetExtension(FilePath) и System.IO.File.ReadAllText(FilePath)Я могу написать:
Path.GetExtension(FilePath) и File.ReadAllText(FilePath)
Дальше я получаю путь к файлу благодаря OFD. И так, как расширений при открытии теперь у меня может быть несколько, я должен узнать это расширение и в зависимости от того, какой тип файла - открыть его, как обычный текст или как RTF.
Пробуем открыть текстовый файл. Открылся. Теперь пробуем открыть файл RTF. Теперь то, что открывалось, как набор мета-тегов (Рис.2), стало нормальным, оформленным текстом (Рис.3):
Комментариев нет:
Отправить комментарий
Спрашивайте, критикуйте, оставьте свое мнение