/*★ Tree View にタイトルを表示 前田 稔 ★*/
・・・
//using System.Management;
using System.IO; // for File, StreamReader
using System.Text; // for Encoding
using System.Collections; // ArrayList
public class MyForm : Form
{
private MenuStrip menuStrip1;
private ToolStrip toolStrip1;
private SplitContainer splitContainer1;
private TreeView treeView1;
private RichTextBox richTextBox1;
private TextBox Title;
ArrayList t_lev = new ArrayList(); // Level
ArrayList t_ttl = new ArrayList(); // Title
ArrayList t_ymd = new ArrayList(); // YYMMDD
ArrayList t_txt = new ArrayList(); // Text Data
ArrayList t_node = new ArrayList(); // TreeView node
int m_Idx; // Table Index
public MyForm()
{
InitializeComponent();
this.Resize += new System.EventHandler(this.FormResize);
this.Load += new System.EventHandler(MyForm_Load);
}
// アプリケーションの初期化
private void MyForm_Load(object sender, System.EventArgs e)
{
ReadFile("C:\\TMP\\test2.mem");
m_Idx = 0;
treeView1.TopNode.Expand();
}
// memo2.mem を切り分けて ArrayList に格納する
private void ReadFile(string file)
{
StreamReader reader;
string str;
int pt, wk;
reader = new StreamReader(file, Encoding.GetEncoding("Shift_JIS"));
str = reader.ReadToEnd();
reader.Close();
if (str[0] != '@') str = str.Replace("", "@");
t_lev.Clear();
t_ttl.Clear();
t_ymd.Clear();
t_txt.Clear();
t_node.Clear();
pt = str.IndexOf("@@");
if (pt < 0)
{
MessageBox.Show("memo file ではありません", "Error");
return;
}
for (pt = 0; pt < str.Length; )
{
pt = str.IndexOf("@@", pt);
if (pt < 0) break;
for (wk = pt; str[pt] == '@'; pt++) ;
t_lev.Add(pt - wk);
for (wk = pt; str[pt] != ':'; pt++) ;
t_ttl.Add(str.Substring(wk, pt - wk));
pt++;
for (wk = pt; str[pt] != '\n'; pt++) ;
t_ymd.Add(str.Substring(wk, pt - wk));
pt++;
wk = pt;
pt = str.IndexOf("@@", wk);
if (pt < 0) pt = str.Length;
t_txt.Add(str.Substring(wk, pt - wk));
}
treeView1.Nodes.Clear();
m_Idx = 0;
Set_TVFunc(treeView1, 2);
}
// TreeView に登録する関数(lev=2 で呼ばれる)
private void Set_TVFunc(TreeView node, int lev)
{
TreeNode wk;
int key;
if (m_Idx >= t_ttl.Count) return;
key = (int)t_lev[m_Idx];
if (key == 2)
{
t_node.Add(new TreeNode((string)t_ttl[m_Idx]));
node.Nodes.Add((TreeNode)t_node[m_Idx]);
m_Idx++;
Set_TVFunc(node, key);
}
if (key > lev)
{
wk = node.TopNode;
while (wk.NextNode != null) wk = wk.NextNode;
Set_TVFunc(wk, key);
}
if (key == lev) Set_TVFunc(node, lev);
}
// TreeView に登録する再帰関数
private void Set_TVFunc(TreeNode node, int lev)
{
int key;
if (m_Idx >= t_ttl.Count) return;
key = (int)t_lev[m_Idx];
//Console.WriteLine("lev=" + lev + " key=" + key + " m_Idx=" + m_Idx);
if (key == lev)
{
t_node.Add(new TreeNode((string)t_ttl[m_Idx]));
node.Nodes.Add((TreeNode)t_node[m_Idx]);
m_Idx++;
Set_TVFunc(node, lev);
}
if (key > lev) Set_TVFunc(node.LastNode, key);
// 関数が return すると、ここに制御が戻ります
if (key == lev) Set_TVFunc(node, lev);
}
}
class form01
{
public static void Main()
{
MyForm mf = new MyForm();
Application.Run(mf);
}
}
|