前田稔(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
※・