データベースからコンボボックスが入力された親フォームがあり、そこからユーザーが選択できます。コンボボックスの最後の値は「新規追加」です。ユーザーがこれを選択すると、ユーザーがデータベースに新しい値を追加するための子フォームが開きます。return value
この値をデータベースに追加し、新しい値を親に送信してフォームを閉じるためのボタン押下イベントがあります。次に、親はコンボボックスから新しい値を選択し、ユーザーが別のアクションを実行するのを待つ必要があります。
ただし、return value
を親に送信してフォームを閉じるコードは正しく機能していません。私hide
は子供です。次に、親と一緒に関数を呼び出して、にアクセスしreturn value
ます。この時点で、子フォームとコードは、別のまたはshows
を実行する前に停止します。hide
close
どうすればこれを修正できますか(以下のコード)?
親コンボボックスイベント:
Private Sub cmbLocations_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbLocations.SelectedIndexChanged
If Not cmbLocations.SelectedIndex = -1 Then
If cmbLocations.SelectedIndex = cmbLocations.Items.Count - 1 Then
If diaAddLocation.IsAccessible = False Then diaAddLocation.Activate()
diaAddLocation.RequestSender = Me
diaAddLocation.ShowDialog()
FillLocations()
cmbLocations.SelectedIndex = LocationFromLocationName(diaAddLocation.formresult)
diaAddLocation.Close()
diaAddLocation.Dispose()
Else
bttYes.Enabled = True
End If
End If
End Sub
子ボタンを押して戻り値機能
Public Sub bttAddLOCtoDatabase_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttAddLOCtoDatabase.Click
Dim LocationToBeAdded As String
LocationToBeAdded = "'" & TextBox1.Text & "'"
AddLocation("'" & textbox1.Text & "'")
FormResult = textbox1.Text
GetLocations()
frmFieldMaster.InitialiseNewParameter()
Me.Hide()
End Sub
Public Function Result() As String
Return FormResult
End Function
編集:
Steveのソリューションが実装されたコード:
Public Sub bttAddLOCtoDatabase_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttAddLOCtoDatabase.Click
Dim LocationToBeAdded As String
LocationToBeAdded = "'" & TextBox1.Text & "'"
AddLocation("'" & textbox1.Text & "'")
FormResult = textbox1.Text
GetLocations()
frmFieldMaster.InitialiseNewParameter()
DialogResult = Windows.Forms.DialogResult.OK
'me.Hide()
End Sub
Public Function Result() As String
Return FormResult
Me.Close()
End Function
Private Sub cmbLocations_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbLocations.SelectedIndexChanged
Dim ValueTaken As Boolean = False
If Not cmbLocations.SelectedIndex = -1 Then
If cmbLocations.SelectedIndex = cmbLocations.Items.Count - 1 Then
Using diaaddlocation = New diaAddLocation
diaaddlocation.requestsender = Me
If DialogResult.OK = diaaddlocation.showdialog Then
FillLocations()
cmbLocations.SelectedIndex = LocationFromLocationName(diaaddlocation.result)
diaaddlocation.close()
ElseIf DialogResult.Cancel = diaaddlocation.showdialog Then
cmbLocations.SelectedIndex = -1
End If
End Using
Else
bttYes.Enabled = True
End If
End If
End Sub
コードを実行するIF DialogResult.OK...
と、子が入力されて開きます。次に、子を閉じると、親は次の2行のコードを実行し、子から結果を取得します。この後、親はIF DialogResult.OK...
再び回線を実行し、子を開いたまま停止します。コードがdiaaddlocation.close
行に到達することはありません。