
| 親メニュー | 子メニュー | メソッド | 説明 |
|---|---|---|---|
| ツリー(&T) | |||
| ☆兄弟項目を追加(&S) | Add_Sibling | 空の兄弟項目を追加します | |
| ・子項目を追加(&I) | Add_Child | 空の子項目を追加します | |
| 削除/ごみ箱(&D) | Del_Node | 項目を削除します(ごみ箱へ移動) | |
| コピー(&C) | Copy_Node | 項目を記録します | |
| 記憶して切り取り(&T) | Cut_Node | 項目を記録して切り取ります | |
| ☆兄弟で貼り付け(&P) | Ins_Sibling | 記録した項目を兄弟で貼り付けます | |
| ・子で貼り付け(&Q) | Ins_Child | 記録した項目を子で貼り付けます |
string m_str; // Node 選択文字列
// node のデータを再帰で m_str に取得
private void Get_TVFunc(TreeNode node, int lev)
{
string str;
int i;
if (node==null) return;
for(i=0; i<t_node.Count && (TreeNode)t_node[i]!=node; i++);
if (i>=t_node.Count) return;
str = new string('@', (int)t_lev[i]);
str += t_ttl[i] + ":" + t_ymd[i] + "\n" + t_txt[i];
m_str += str;
Get_TVFunc(node.FirstNode, lev);
if ((int)t_lev[i] > lev) Get_TVFunc(node.NextNode, lev);
}
|
// ArrayList の idx から連続する lev 以上(子)のデータを削除する
private void Del_Array(int idx, int lev)
{
t_node.RemoveAt(idx);
t_lev.RemoveAt(idx);
t_ttl.RemoveAt(idx);
t_ymd.RemoveAt(idx);
t_txt.RemoveAt(idx);
while(idx<t_lev.Count && (int)t_lev[idx]>lev)
{ t_node.RemoveAt(idx);
t_lev.RemoveAt(idx);
t_ttl.RemoveAt(idx);
t_ymd.RemoveAt(idx);
t_txt.RemoveAt(idx);
}
}
|
// ArrayList の idx の直後に m_str を挿入する
// lev:最初に追加するレベル Insert(ix,文字列)はixの直前に追加
private void Ins_Array(int idx, int lev)
{ int ix, lv, pt, wk;
pt = m_str.IndexOf("@@");
if (pt<0)
{ MessageBox.Show("memo data ではありません","Error");
return;
}
for(wk=pt; m_str[pt]=='@'; pt++);
lv = lev-(pt-wk);
for(pt=0, ix=idx+1; pt<m_str.Length; ix++)
{ pt = m_str.IndexOf("@@", pt);
if (pt<0) break;
for(wk=pt; m_str[pt]=='@'; pt++);
t_lev.Insert(ix, (pt-wk)+lv);
for(wk=pt; m_str[pt]!=':'; pt++);
t_ttl.Insert(ix, m_str.Substring(wk,pt-wk));
pt++;
for(wk=pt; m_str[pt]!='\n'; pt++);
t_ymd.Insert(ix, m_str.Substring(wk,pt-wk));
pt++;
wk = pt;
pt = m_str.IndexOf("@@", wk);
if (pt<0) pt = m_str.Length;
t_txt.Insert(ix, m_str.Substring(wk,pt-wk));
}
}
|
private void ReTree_Node(int idx)
{
t_node.Clear();
treeView1.Nodes.Clear();
m_Idx = 0;
Set_TVFunc(treeView1, 2); // TreeView を再登録
m_Idx = 0;
if (idx < t_node.Count) m_Idx = idx;
//treeView1.ExpandAll();
treeView1.SelectedNode = (TreeNode)t_node[m_Idx];
richTextBox1.Text = (string)t_txt[m_Idx];
richTextBox1.Modified = false;
m_UP = true;
}
|
// 兄弟項目を追加
private void Add_Sibling(object sender, EventArgs e)
{
string str = DateTime.Now.ToString();
str = str.Substring(0, 10) + ":" + str.Substring(0, 10);
int lev = (int)t_lev[m_Idx];
for (m_Idx++; m_Idx < t_lev.Count && (int)t_lev[m_Idx] > lev; m_Idx++) ;
t_lev.Insert(m_Idx, lev);
t_ttl.Insert(m_Idx, "☆新規項目");
t_ymd.Insert(m_Idx, str);
t_txt.Insert(m_Idx, "新規項目\n");
ReTree_Node(m_Idx);
}
|
// 子項目を追加
private void Add_Child(object sender, EventArgs e)
{
string str = DateTime.Now.ToString();
str = str.Substring(0, 10) + ":" + str.Substring(0, 10);
t_lev.Insert(m_Idx + 1, (int)t_lev[m_Idx] + 1);
t_ttl.Insert(m_Idx+1, "☆新規項目");
t_ymd.Insert(m_Idx+1, str);
t_txt.Insert(m_Idx+1, "新規項目\n");
ReTree_Node(m_Idx+1);
}
|
// 項目を削除します(ごみ箱へ移動)
private void Del_Node(object sender, EventArgs e)
{
int dust; //ごみ箱のインデックス
for(dust=0; dust<t_ttl.Count && (string)t_ttl[dust]!="ごみ箱"; dust++);
TreeNode node;
for(node=(TreeNode)t_node[m_Idx]; node.Parent!=null; node=node.Parent);
if (dust<t_ttl.Count && t_node[dust]==node)
{ //MessageBox.Show("ごみ箱から削除", "Message");
Del_Array(m_Idx, (int)t_lev[m_Idx]);
}
else
{ //MessageBox.Show("ごみ箱に移動", "Message");
m_str = "";
Get_TVFunc((TreeNode)t_node[m_Idx], (int)t_lev[m_Idx]);
Ins_Array(dust, (int)t_lev[dust]+1);
Del_Array(m_Idx, (int)t_lev[m_Idx]);
}
ReTree_Node(m_Idx);
}
|
// 項目をコピーします
private void Copy_Node(object sender, EventArgs e)
{
m_str = "";
Get_TVFunc((TreeNode)t_node[m_Idx], (int)t_lev[m_Idx]);
Clipboard.SetDataObject(m_str, true);
}
|
TreeNode node = (TreeNode)t_node[m_Idx];
node.Remove();
|
// 項目を記録して切り取ります
private void Cut_Node(object sender, EventArgs e)
{
m_str = "";
Get_TVFunc((TreeNode)t_node[m_Idx], (int)t_lev[m_Idx]);
Clipboard.SetDataObject(m_str, true);
Del_Array(m_Idx, (int)t_lev[m_Idx]);
ReTree_Node(m_Idx);
}
|
// m_Idx の兄弟 NODE として m_str を挿入する
private void Ins_Sibling(object sender, EventArgs e)
{
IDataObject data = Clipboard.GetDataObject();
if (data != null && data.GetDataPresent(DataFormats.Text) == true)
m_str = Clipboard.GetText();
int lev = (int)t_lev[m_Idx];
for(m_Idx++; m_Idx<t_lev.Count && (int)t_lev[m_Idx]>lev; m_Idx++);
Ins_Array(m_Idx-1, lev);
ReTree_Node(m_Idx);
}
|
// m_Idx の子 NODE として m_str を挿入する
private void Ins_Child(object sender, EventArgs e)
{
IDataObject data = Clipboard.GetDataObject();
if (data != null && data.GetDataPresent(DataFormats.Text) == true)
m_str = Clipboard.GetText();
Ins_Array(m_Idx, (int)t_lev[m_Idx]+1);
m_Idx++;
ReTree_Node(m_Idx);
}
|
this.treeView1.LabelEdit = true;
this.treeView1.AfterLabelEdit += new NodeLabelEditEventHandler(treeView1_AfterLabelEdit);
|
// TreeView のラベルが変更されたとき
private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
{ if (e.Label != null)
{ //MessageBox.Show("ラベルが変更されたとき", "Message");
if (m_Idx < t_ttl.Count)
{
t_ttl[m_Idx] = e.Label;
Title.Text = (string)t_ttl[m_Idx] + "(" + (string)t_ymd[m_Idx] + ")";
}
m_UP = true;
}
}
|
private void InitializeComponent()
{
・・・
// treeView1
this.treeView1.ContextMenuStrip = this.contextMenuStrip2;
・・・
this.treeView1.AfterLabelEdit +=
new System.Windows.Forms.NodeLabelEditEventHandler(this.treeView1_AfterLabelEdit);
this.treeView1.AfterSelect +=
new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
|
※・