1

私は vb.net Windows アプリケーションに取り組んでいます。これには、テキストボックスとコントロールがほとんどないWindowsフォームがあります。フォームを読み込んだ後、そのフォームにいくつかのコントロールを作成して削除します。また、フォームにリセット ボタンがあるので、ユーザーはそれをクリックして、フォームの元のデザインを取得できます。InitializeComponents() メソッドを呼び出そうとしました。ただし、フォームの変更は反映されません。ボタンをクリックしてオリジナルのデザインを取得するにはどうすればよいですか?

わかりました、質問を修正する必要があります。すべてのコントロールを再設計するのではなく、変更したツリービューのみを再設計します。

4

3 に答える 3

2

Windowsフォームの「元の」状態/設定はどこにも追跡されません。実行時に行う変更(コントロールの追加、サイズ変更、削除など)はすべてリアルタイムで行われ、フォームの現在の唯一の状態になります。

元の設定を自分で追跡してから、すべてのコントロールをループして復元するコードを作成することもできますが、それは大変な作業になります。

より簡単な解決策は、現在のフォームを破棄して、新しく作成したフォームに置き換えることです。もちろん、新しいフォームが作成されると、デフォルトの状態になります。これはまさにあなたが望むものです。


編集:呼び出しInitializeComponents()は完璧な解決策ではありません。と呼ばれないのには理由がありReinitializeComponents()ます。フォームが最初に作成および表示されるときに初期初期化を行うように設計されています。クライアントコードによって他の場所で再度呼び出されるようには設計されていません。とにかくそうするなら、それは物事を壊滅させるでしょう。

保存について心配しているのがツリーノードだけである場合は、削除したものを保持するクラスレベルのメンバーを宣言してみませんか?Queueまたはコレクションのようなものを使用しStackて、削除後にそれらを保持し、TreeViewに復元するときにそれらをポップアウトすることができます。

于 2013-02-15T06:41:59.653 に答える
1
Public Sub resetform(ByVal form_name as Form)  
    form_name.dispose  
    form_name.show
End Sub

ボタンクリックイベントでリセットフォームを呼び出します

resetform(YourFormName)
于 2013-02-15T06:54:31.197 に答える
0

私はただ回避し、それは今やった。変数をtreenodeとして取得し、元のツリービューのクローンを割り当てました。最後に、その変数をツリービューに追加します。

于 2013-02-15T08:43:16.960 に答える