親メニュー | 子メニュー | メソッド | 説明 |
---|---|---|---|
ツリー(&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); |