2

winform が開くたびに、一連のノードが取り込まれる Treeview コントロールを表示する winform があります。私のコードでは、ユーザーがノードを選択して小さなダイアログを開き、ノードのテキストを編集する値を入力できます。

ユーザーがフォームを閉じたときにツリービュー全体の変更を確認することは可能ですか?

すべてのノードを 1 つの文字列にまとめて、フォームを閉じるときに新しい文字列として再度合計し、以前に作成した文字列と比較することを考えていましたが、これを行うより良い方法があると思います。

4

3 に答える 3

0

ノードを前もってキャッシュしておくと、すべての変更を確認できますがTreeView、正しいアプローチは、変更が発生したときにそれを管理することだと思います。たとえば、ノードを編集するフォームを開くと、元のフォームで次のように渡されます。

private Form1 _f;

...

public Form2(Form1 f)
{
    this._f = f;
}

そして、overrideこのようなOnClosing方法Form2

protected override void OnClosing(CancelEventArgs e)
{
    this._f.SetChangedNode(...);
}

SetChangedNodeでメソッドを作成しますForm1。これらのパラメーターがどのように見えるかはわかりませんが、おそらく次のようなものTreeNode node, string newLabelであり、それらの値を簡単にに保存して、アプリケーションを閉じるときにDictionary<TreeNode, string>それを活用できます。Dictionary

于 2013-04-23T12:22:12.097 に答える
0

短い答え: はい、可能です。

アプリケーションが閉じられるまで変更の保存または登録を待つことを主張する場合は、単純な再帰関数を記述して、現在のバージョン (可能な変更を含む作業メモリ) を古いバージョン (保存した場所からロードされたもの) でトラバースすることができます。実装はお任せします。とにかく、ここにいくつかのインスピレーションがあります:

http://en.wikipedia.org/wiki/Tree_traversal

個人的には、[OK] または [保存] を押して編集フォームを閉じたときに、ユーザーが行った変更を保存することを検討してください。

于 2013-04-23T12:27:46.437 に答える