前回は外観をつくったので、次は機能的な部分をつくります。今回はツリービュー関連についてやっていきます。
メニューはこんな感じ。
まずデータを管理するためのクラスを作成します。管理するデータといえばリッチテキストのデータ、それ以外にも作成日時や更新日時など・・・他にもあるかもしれません。とりあえずこんなクラスをつくります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class Data { public Data() { CreateTime = DateTime.Now.Ticks; RichData = new RichData(); } public RichData RichData { get; set; } } |
SyncTreeViewでは新しいノードをつくるメソッドとしてAddNodeFirstChild、AddNodeLastChild、AddNextNode、AddPrevNodeを作成しました。
これらを使えば新しいノードをつくることは簡単にできます。またノードにアイコンを表示できるようにイメージリストにbmpファイルを登録しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public partial class Form1 : Form { public Form1() { InitializeComponent(); group = new SyncGroup(imageList1); // イメージリストをセット group.SetTreeView(syncTreeViewEx1); // これでsyncTreeViewEx1と group.SetTreeView(syncTreeViewEx2); // syncTreeViewEx2の内容は同期される syncRichTextBoxEx1.Data = richData; // 同じDataをもつSyncRichTextBoxの内容は syncRichTextBoxEx2.Data = richData; // 同期される } SyncGroup group = null; RichData richData = new RichData(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
public partial class Form1 : Form { int num = 0; private void AddFirstItemToolStripMenuItem_Click(object sender, EventArgs e) { TreeNodeEx node = syncTreeViewEx1.SelectedNode; syncTreeViewEx1.AddNodeFirstChild(node, String.Format("NewItem {0}", ++num), 0, 0, new Data()); } private void AddLastItemToolStripMenuItem_Click(object sender, EventArgs e) { TreeNodeEx node = syncTreeViewEx1.SelectedNode; syncTreeViewEx1.AddNodeLastChild(node, String.Format("NewItem {0}", ++num), 1, 1, new Data()); } private void AddPrevItemToolStripMenuItem_Click(object sender, EventArgs e) { TreeNodeEx node = syncTreeViewEx1.SelectedNode; syncTreeViewEx1.AddNodePrev(node, String.Format("NewItem {0}", ++num), 2, 2, new Data()); } private void AddNextItemToolStripMenuItem_Click(object sender, EventArgs e) { TreeNodeEx node = syncTreeViewEx1.SelectedNode; syncTreeViewEx1.AddNodeNext(node, String.Format("NewItem {0}", ++num), 3, 3, new Data()); } } |
また選択されているノードが変更されたら右側に表示されるリッチテキストを変更する必要があります。これはBeforeSelectイベントとAfterSelectイベントを利用すれば簡単にできます。
1 2 3 4 5 6 7 |
public partial class Form1 : Form { Data GetData(TreeNodeEx node) { return (Data)node.Data; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
public partial class Form1 : Form { private void syncTreeViewEx1_BeforeSelect(SyncTreeView sender, BeforeSelectArgs e) { var node = syncTreeViewEx1.SelectedNode; if (node == null) return; if (syncRichTextBoxEx1.Modified) { GetData(node).RichData = syncRichTextBoxEx1.Data; } } private void syncTreeViewEx1_AfterSelect(SyncTreeView sender, AfterSelectArgs e) { var node = syncTreeViewEx1.SelectedNode; if (node == null) return; syncRichTextBoxEx1.Data = GetData(node).RichData; var dt1 = new DateTime(GetData(node).RichData.CreateTime); var dt2 = new DateTime(GetData(node).RichData.SaveTime); Console.WriteLine(String.Format("作成{0} 更新{1}", dt1.ToString(), dt2.ToString())); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
public partial class Form1 : Form { private void syncTreeViewEx2_BeforeSelect(SyncTreeView sender, BeforeSelectArgs e) { var node = syncTreeViewEx2.SelectedNode; if (node == null) return; if (syncRichTextBoxEx2.Modified) { GetData(node).RichData = syncRichTextBoxEx2.Data; } } private void syncTreeViewEx2_AfterSelect(SyncTreeView sender, AfterSelectArgs e) { var node = syncTreeViewEx2.SelectedNode; if (node == null) return; syncRichTextBoxEx2.Data = GetData(node).RichData; var dt = new DateTime(GetData(node).RichData.SaveTime); Console.WriteLine(dt.ToString()); } } |
ノードの作成時刻と内容が更新された時刻を保存しています。