前田稔(Maeda Minoru)の超初心者のプログラム入門
![]()
![]()
ArrayList m_page; // 編集ページの配列
int m_num; // 現在編集中の m_page
private void FileClose(object sender, EventArgs e)
{ DialogResult rc;
if (m_num < 0 || m_num >= m_page.Count) return;
if (m_fclass.flag || ((FileClass)m_page[m_num]).flag)
{ rc = MessageBox.Show("保存しないで閉じますか", "選択",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (rc == DialogResult.No) return;
}
m_page.RemoveAt(m_num);
if (m_num<tabControl1.TabPages.Count)
{ tabControl1.TabPages.RemoveAt(m_num); }
m_fclass.flag = false;
m_num = -1;
PageChenge(0, -1);
}
|
private void Swap(object sender, EventArgs e)
{
if (m_page.Count<2 || m_num==0) return;
m_page[m_num] = m_page[0];
m_page[0]= m_fclass;
tabControl1.GetControl(m_num).Text = ((FileClass)m_page[m_num]).file;
tabControl1.GetControl(0).Text = m_fclass.file;
tabControl1.SelectTab(0);
}
|
//★ キー操作
private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
・・・
case Keys.F9:
FileComp();
break;
|
// Tab がアクティブのとき、F9(ファイル比較)を押す
private void TabKeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F9) FileComp();
}
|
// File を比較
private void FileComp()
{
int pg, pos0, posn;
string str0, strn;
if (m_page.Count<2 || m_num<1)
{
MessageBox.Show("比較対象ページを選択して下さい");
return;
}
pg = m_num;
posn = ((FileClass)m_page[m_num]).cursor;
pos0 = ((FileClass)m_page[0]).cursor;
strn = richTextBox1.Text;
PageChenge(0, pos0);
str0 = richTextBox1.Text;
for (posn++, pos0++; posn < strn.Length && pos0 < str0.Length; posn++, pos0++)
{
if (strn[posn] != str0[pos0])
{ break; }
}
richTextBox1.SelectionStart = pos0;
((FileClass)m_page[0]).cursor = pos0;
((FileClass)m_page[pg]).cursor = posn;
PageChenge(pg, posn);
}
|
private void PageChenge(int newpage, int cursor)
{
if (m_page.Count == 0)
{ richTextBox1.Clear();
return;
}
if (newpage!=m_num) //ページが異なるとき
{ //現在ページを保存
if (m_num>=0 && m_num<m_page.Count)
{
m_fclass.Save();
m_fclass.cursor = richTextBox1.SelectionStart;
m_page[m_num] = m_fclass;
}
//m_page[newpage]をロード
m_num = newpage;
if (m_num<0 || m_num>=m_page.Count) m_num = 0;
m_fclass = (FileClass)m_page[m_num];
m_fclass.Load();
tabControl1.SelectTab(m_num);
}
m_fclass.SetCurPos(cursor);
this.Text = m_fclass.path;
FileClass.WordSelect(m_fclass.cursor, Color.Green);
richTextBox1.Select(m_fclass.cursor, 0);
}
|
![]()
ArrayList m_files; // Pre Load File
m_files = new ArrayList();
|
// m_files[] プリロード
private void PreLoad(object sender, EventArgs e)
{
for (int i = 0; i < m_files.Count; i++)
{
LoadFile(((FileName)m_files[i]).path, ((FileName)m_files[i]).code, ((FileName)m_files[i]).cursor);
}
}
// 一度削除してから追加
private void PreAdd(object sender, EventArgs e)
{
if (m_num < 0) return;
PreDel(sender, e);
FileName fname = new FileName(m_fclass.path, m_fclass.code, m_fclass.cursor);
m_files.Add(fname);
}
private void PreDel(object sender, EventArgs e)
{
int i;
for(i=0; i<m_files.Count && ((FileName)m_files[i]).path!=m_fclass.path; i++);
if (i<m_files.Count) m_files.RemoveAt(i);
}
private void PreCloar(object sender, EventArgs e)
{
m_files.Clear();
}
|
![]()
public class XmlClass
{
public string name; //Font Name
public float point; //Font Size
public int width; //ウインドウ幅
public int height; //ウインドウ高さ
public ArrayList path; //ファイルパス
public ArrayList code; //TEXTコード
public ArrayList cursor; //カーソル位置
}
|
private void Form_Load(object sender, EventArgs e)
{
if (File.Exists(XML_File)) //ファイルの有無をチェック
{
System.Xml.Serialization.XmlSerializer serializer =
new System.Xml.Serialization.XmlSerializer(typeof(XmlClass));
System.IO.FileStream fs =
new System.IO.FileStream(XML_File, System.IO.FileMode.Open);
XmlClass obj = (XmlClass)serializer.Deserialize(fs);
fs.Close();
int point = (int)obj.point;
m_font = new Font(obj.name, point);
m_width = obj.width;
m_height = obj.height;
for(int i=0; i<obj.path.Count; i++)
{ FileName fname =
new FileName((string)obj.path[i], (string)obj.code[i], (int)obj.cursor[i]);
m_files.Add(fname);
}
}
else m_font = new Font("MS 明朝", 12);
richTextBox1.Font = m_font;
richTextBox1.LanguageOption = RichTextBoxLanguageOptions.UIFonts;
if (m_width<100) m_width = 1000;
if (m_height<100) m_height = 480;
this.Width = m_width;
this.Height = m_height;
// 4 TAB に設定
const int EM_SETTABSTOPS = 0x00CB;
SendMessage(richTextBox1.Handle, EM_SETTABSTOPS, 1, new int[] {16});
}
|
private void Form_Closing(object sender, FormClosingEventArgs e)
{
if (Cancel_Check())
{
e.Cancel = true;
return;
}
XmlClass obj = new XmlClass();
obj.name = m_font.Name;
obj.point = m_font.SizeInPoints;
obj.width = this.Width;
obj.height = this.Height;
obj.path = new ArrayList();
obj.code = new ArrayList();
obj.cursor = new ArrayList();
for(int i=0; i<m_files.Count; i++)
{
obj.path.Add(((FileName)m_files[i]).path);
obj.code.Add(((FileName)m_files[i]).code);
obj.cursor.Add(((FileName)m_files[i]).cursor);
}
System.Xml.Serialization.XmlSerializer serializer =
new System.Xml.Serialization.XmlSerializer(typeof(XmlClass));
System.IO.FileStream fs =
new System.IO.FileStream(XML_File, System.IO.FileMode.Create);
serializer.Serialize(fs, obj);
}
|
![]()
| 文字コード | BOM | 説明 |
|---|---|---|
| utf-16 | FFFE | 先頭2バイトが BOM です |
| utf-8 | EFBBBF | 先頭3バイトが BOM です |
| utf-8(BOM無し) | BOM はありません |
![]()
[Previous Chapter ↑] FileClass
※・