私は、ウィザードのように機能するものをコーディングしていますが、どうやって行うのかは分かりません。.NET WinForms - "戻る"ボタン
複数のフォームがあります。それぞれは以前のフォームのデータに依存して異なる処理を行います。それぞれから入力を取得して別の入力に渡す「マスターフォーム」があります。通常、私はちょうどform.ShowDialog()を使用して、入力を待って、次のフォームをインスタンス化して繰り返します。しかし、今度は、ユーザはしばらく前のフォームに戻る必要があります。
問題を理解できるように、「GoTo」ステートメントで非常に簡単なコードを記述しました。はい、うまくいきますが、もっと良い方法があるのだろうかと思います。私はしばらくの間、この問題に悩まされていたので、どんな助けも非常に高く評価されるでしょう!
TestFormを:あなたが開くごとに連続した形で
Public Class TestForm
Public Property Result As Object
Public Sub New(data As Object)
InitializeComponent()
DoSomethingWithData(data)
End Sub
Private Sub DoSomethingWithData(data As Object)
Result = "something"
End Sub
End Class
Public Class MasterForm
Inherits Form
Public Sub New()
Dim button As New Button()
AddHandler button.Click, AddressOf Start
Controls.Add(button)
End Sub
Private Sub Start(sender As Object, e As EventArgs)
Step1:
Dim testForm1 = New TestForm("rainbows")
If testForm1.ShowDialog() = DialogResult.Cancel Then
Return
End If
Step2:
Dim testForm2 = New TestForm(testForm1.Result)
If testForm2.ShowDialog() = DialogResult.Cancel Then
GoTo Step1
End If
Step3:
Dim testForm3 = new TestForm(testForm2.Result)
If testForm3.ShowDialog() = DialogResult.Cancel Then
Goto Step2
End If
End Sub
End Class
フォームは別のフォームのコンテナに埋め込むことができます。私がこれに取り組む方法は、ページが着陸したときに順番に各フォームをインスタンス化することですが、ユーザーがウィザードを終了するまでメモリに残しておきます。 Backは、現在のフォームをパネル上に隠し、前のフォームを表示する単純なケースになります。ここでの問題は、あなたのロジックが、ウィザードが現在やっていることの状態マシンに似ているのではなく、ユーザーが選択したものによって変更されていることです。 –