В общем программа открывает текстовый файл, редактирует его (просто переставляет местами 2 выбранных слова) и через контекстное меню сохраняет. В rtf сохраняет как надо. А вот в txt добавляется всякий треш. То есть допустим нужно просто отредактировать и сохранить строку:
"America’s music culture would be incomplete without blues music."
Открываю документ txt, а там:
{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset204 Microsoft Sans Serif;}{\f1\fnil\fcharset0 Microsoft Sans Serif;}}
{\colortbl ;\red255\green0\blue0;\red0\green128\blue0;}
\viewkind4\uc1\pard\lang1049\f0\fs17 America\f1\rquote s \highlight1 blues\highlight0 culture would be incomplete without \highlight2 music\highlight0 music.\f0\par
}
Повторюсь, что в rtf формате нормально сохраняет.
Код контекстного меню программы:
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
| private void Form1_Load(object sender, EventArgs e)
{
//создание контекстного меню
System.Windows.Forms.ContextMenu contextMenu1;
contextMenu1 = new System.Windows.Forms.ContextMenu();
System.Windows.Forms.MenuItem menuItem1;
menuItem1 = new System.Windows.Forms.MenuItem();
System.Windows.Forms.MenuItem menuItem2;
menuItem2 = new System.Windows.Forms.MenuItem();
System.Windows.Forms.MenuItem menuItem3;
menuItem3 = new System.Windows.Forms.MenuItem();
contextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { menuItem1, menuItem2, menuItem3 });
menuItem1.Index = 0;
menuItem1.Text = "Открыть";
menuItem2.Index = 1;
menuItem2.Text = "Сохранить";
menuItem3.Index = 2;
menuItem3.Text = "Сохранить как";
richTextBox1.ContextMenu = contextMenu1;
menuItem1.Click += new System.EventHandler(this.MenuItem1_Click);
menuItem2.Click += new System.EventHandler(this.MenuItem2_Click);
menuItem3.Click += new System.EventHandler(this.MenuItem3_Click);
}
string MyFName = "";
private void MenuItem1_Click(object sender, System.EventArgs e)
{
openFileDialog1.Filter = "Текстовые файлы (*.rtf; *.txt ) | *.rtf; *.txt";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
MyFName = openFileDialog1.FileName;
if (System.IO.Path.GetExtension(MyFName) == ".rtf")
{
richTextBox1.LoadFile(MyFName, RichTextBoxStreamType.RichText);
}
else
{
richTextBox1.LoadFile(MyFName, RichTextBoxStreamType.PlainText);
}
}
}
private void MenuItem2_Click(object sender, EventArgs e)
{
if (MyFName != "")
{
richTextBox1.SaveFile(MyFName);
}
else
{
saveFileDialog1.Filter = "Текстовые файлы (*.rtf; *.txt) | *.rtf; *.txt";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
MyFName = saveFileDialog1.FileName;
richTextBox1.SaveFile(MyFName);
}
}
}
private void MenuItem3_Click(object sender, System.EventArgs e)
{
saveFileDialog1.Filter = "Текстовые файлы (*.rtf; *.txt) | *.rtf; *.txt";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
MyFName = saveFileDialog1.FileName;
richTextBox1.SaveFile(MyFName);
}
} |
|
Если нужно, то вот программа целиком:
C# |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
| using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace LR2metodichka
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
button4.Enabled = false;
}
private void Form1_Load(object sender, EventArgs e)
{
//создание контекстного меню
System.Windows.Forms.ContextMenu contextMenu1;
contextMenu1 = new System.Windows.Forms.ContextMenu();
System.Windows.Forms.MenuItem menuItem1;
menuItem1 = new System.Windows.Forms.MenuItem();
System.Windows.Forms.MenuItem menuItem2;
menuItem2 = new System.Windows.Forms.MenuItem();
System.Windows.Forms.MenuItem menuItem3;
menuItem3 = new System.Windows.Forms.MenuItem();
contextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { menuItem1, menuItem2, menuItem3 });
menuItem1.Index = 0;
menuItem1.Text = "Открыть";
menuItem2.Index = 1;
menuItem2.Text = "Сохранить";
menuItem3.Index = 2;
menuItem3.Text = "Сохранить как";
richTextBox1.ContextMenu = contextMenu1;
menuItem1.Click += new System.EventHandler(this.MenuItem1_Click);
menuItem2.Click += new System.EventHandler(this.MenuItem2_Click);
menuItem3.Click += new System.EventHandler(this.MenuItem3_Click);
}
string MyFName = "";
private void MenuItem1_Click(object sender, System.EventArgs e)
{
openFileDialog1.Filter = "Текстовые файлы (*.rtf; *.txt ) | *.rtf; *.txt";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
MyFName = openFileDialog1.FileName;
if (System.IO.Path.GetExtension(MyFName) == ".rtf")
{
richTextBox1.LoadFile(MyFName, RichTextBoxStreamType.RichText);
}
else
{
richTextBox1.LoadFile(MyFName, RichTextBoxStreamType.PlainText);
}
}
}
private void MenuItem2_Click(object sender, EventArgs e)
{
if (MyFName != "")
{
richTextBox1.SaveFile(MyFName);
}
else
{
saveFileDialog1.Filter = "Текстовые файлы (*.rtf; *.txt) | *.rtf; *.txt";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
MyFName = saveFileDialog1.FileName;
richTextBox1.SaveFile(MyFName);
}
}
}
private void MenuItem3_Click(object sender, System.EventArgs e)
{
saveFileDialog1.Filter = "Текстовые файлы (*.rtf; *.txt) | *.rtf; *.txt";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
MyFName = saveFileDialog1.FileName;
richTextBox1.SaveFile(MyFName);
}
}
private void Button1_Click(object sender, EventArgs e)//Кнопка сброс
{
textBox1.Clear();
textBox2.Clear();
textBox3.Clear();
button2.Enabled = true;
button3.Enabled = true;
button4.Enabled = true;
}
int result1, result2;
private void Button2_Click(object sender, EventArgs e)//Кнопка найти первое слово
{
int LenText;
textBox3.Text += "Поиск первого слова" + Environment.NewLine;
String FWord = textBox1.Text.ToString();
LenText = richTextBox1.Text.Length;
result1 = FindWord(FWord, LenText);
if (result1 != -1)
{
textBox3.Text += "Позиция первого слова: " + (result1 + 1) + Environment.NewLine + Environment.NewLine;
richTextBox1.SelectionStart = result1;
richTextBox1.SelectionLength = FWord.Length;
richTextBox1.SelectionBackColor = Color.Red;
button2.Enabled = false;
if (button3.Enabled == false)
{
button4.Enabled = true;
}
}
else
{
textBox3.Text += "Слово не найдено " + Environment.NewLine + Environment.NewLine;
}
}
private void Button3_Click(object sender, EventArgs e)//Кнопка найти второе слово
{
int LenText;
textBox3.Text += "Поиск второго слова" + Environment.NewLine;
String FWord = textBox2.Text.ToString();
LenText = richTextBox1.Text.Length;
result2 = FindWord(FWord, LenText);
if (result2 != -1)
{
textBox3.Text += "Позиция второго слова: " + (result2 + 1) + Environment.NewLine + Environment.NewLine;
richTextBox1.SelectionStart = result2;
richTextBox1.SelectionLength = FWord.Length;
richTextBox1.SelectionBackColor = Color.Green;
button3.Enabled = false;
if (button2.Enabled == false)
{
button4.Enabled = true;
}
}
else
{
textBox3.Text += "Слово не найдено " + Environment.NewLine + Environment.NewLine;
}
}
int FindWord(String FWord, int n)//Метод возвращает номер позиции слова в тексте либо -1, если такого слова в тексте нет
{
int LenWord;
String ComparText;
LenWord = FWord.Length;
for (int i = 0; i <= n - LenWord; i++)
{
ComparText = richTextBox1.Text.Substring(i, LenWord);
if (ComparText == FWord)
{
return i;
}
}
return -1;
}
private void Button4_Click(object sender, EventArgs e)//Кнопка замены слов местами
{
if (result1 < result2)
{
richTextBox1.Select(result2, textBox2.Text.Length);
richTextBox1.SelectedText = textBox1.Text.ToString();
richTextBox1.Select(result1, textBox1.Text.Length);
richTextBox1.SelectedText = textBox2.Text.ToString();
textBox3.Text += "Произошла замена слов";
button4.Enabled = false;
}
else
{
richTextBox1.Select(result1, textBox1.Text.Length);
richTextBox1.SelectedText = textBox2.Text.ToString();
richTextBox1.Select(result2, textBox2.Text.Length);
richTextBox1.SelectedText = textBox1.Text.ToString();
textBox3.Text += "Произошла замена слов";
button4.Enabled = false;
}
}
private void Button5_Click(object sender, EventArgs e)
{
richTextBox1.Clear();
}
}
} |
|
Добавлено через 12 минут
Ещё меня смущает то, что в пункте "сохранить как" нельзя выбрать формат документа, в котором хочешь сохранить строку. Только в rtf сохраняет.