0

簡単なウィザードを作成しています。フォームを保持するための静的クラスを1つ作成しました。

    namespace LABEL_AUTOMATION
    {
        static class ProjectHelper
        {
            public static Form1 frm1 = new Form1();
            public static Form2 frm2 = new Form2();
        }

    }

そしてform1の次のボタンのために私は次のコードを持っています:

 private void buttonNext_Click(object sender, EventArgs e)
    {
        this.Visible = false;
        ProjectHelper.frm2.Visible = true;
    }

およびform2の戻るボタンの同様のロジック:

private void buttonPrevious_Click(object sender, EventArgs e)
{
    this.Visible = false;
    ProjectHelper.frm1.Visible = true;
}

問題は、フォーム間を移動すると、テキストボックスなどのコントロールの値がクリアされることです。

それを修正する方法は?

また、フォームの目に見える変更イベントを使用して、ユーザーがフォームを切り替えたときにコードを実行しています。ただし、フォームが表示される前にイベントが発生します。私が使用できる他のイベントはありますか?

編集: Form1の個別のインスタンスを実際に作成して実行していたProgram.csファイルを実際に変更しませんでした。そこで、コードを次のように変更しました。

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    ProjectHelper.frm1.Show();
}  

しかし、それは次のエラーを与えています:

The type initializer for 'LABEL_AUTOMATION.ProjectHelper' threw an exception.
4

5 に答える 5

2

コントロールをクリアするという問題を解決するには、単純な POCO クラスを作成してデータを保持し、データバインディングを使用してコントロールを POCO クラス インスタンスにバインドします。このようにして、フォームに入力したすべてのデータが POCO クラスに自動的に保存され、フォームが再び表示されると、値が再び表示されます。

visible-changed-event について - 1 つのオプションは、独自のイベントを作成し、それをフォームで起動することです。次に、イベントの発生を自動化する基本クラスを作成できます。このvisible-changed-eventhandlerで何をしているのでしょうか?

于 2012-08-20T07:33:50.590 に答える
1

ProjectHelperクラスにないフォームのインスタンスを表示/非表示にしていると思います。

あなたはメインですべきです

ProjectHelper.frm1.Show();

また

ProjectHelper.frm2.Show();
于 2012-08-20T07:33:15.997 に答える
0

この問題についてはわかりませんが、非表示にする前にすべての値をいくつかの変数に保存し、フォームが再び表示されたときにこの設定を読み込むことができると思います

于 2012-08-20T07:32:41.213 に答える
0

値を外部クラスに保存するか、値が変更されたときに両方のフォーム要素に値を入力する必要があります。

イベントTextChangedまたはコントロール要素を使用ValueChangedしてから、他のフォームで値を設定できます。または、外部クラスを使用してそこに値を設定し、切り替えるたびに外部クラスから値をリロードする必要があります。

ヒント: 複数のフォームは使用しません。1 つのフォームといくつかのパネルのみを使用し、それらを表示または非表示に設定するだけです。

于 2012-08-20T07:34:08.257 に答える
0

UserControlフォームを 1 つ作成し、ウィザードのステップごとに作成することをお勧めします。その後、フォームはパネルの可視性を管理し、イベントを処理 (または起動) できます。

この方法では、静的は必要なく、の寿命を完全に制御できます。およびウィザードの手順のデータ。

次に、ウィザードのステップごとにカスタム クラス (データ ホルダー) を作成し、Windows フォームのデータ バインディングを使用して、UI コントロール (および検証) をデータ ホルダーにデータ バインディングします。これにより、データを保存するためにウィザード ステップでイベント処理を行う必要がなくなり、ウィザード自体が単純なビューになります。

于 2012-08-20T07:51:03.130 に答える