У меня есть следующий код. Цель состоит в том, чтобы после сохранения заказа оно было отменено, а затем я хочу, чтобы он показывал «Новый заказ», Форма - это прекрасно!Как закрыть форму после открытия еще одного над ней
Однако, как только новая форма была открыта, я хочу, чтобы первоначальная форма с отмененным заказом была закрыта.
Try
cmdCheck_Click(sender, New EventArgs)
cmdTotals_Click(sender, New EventArgs)
For Each ugr As UltraGridRow In ugProducts.Rows
If IsDBNull(ugr.Cells("Commission_Value").Value) = True Then
MsgBox("Unable to save an order where one or more lines has a commission value of 0", MsgBoxStyle.OkOnly, "Error")
Exit Sub
Else
If ugr.Cells("Commission_Value").Value <= 0 Then
MsgBox("Unable to save an order where one or more lines has a commission value of 0", MsgBoxStyle.OkOnly, "Error")
Exit Sub
End If
End If
Next
If chCancel.Checked = True Then
If MsgBox("Are you sure you would like to cancel this order?", MsgBoxStyle.YesNo, "Confirm") = MsgBoxResult.No Then
Exit Sub
End If
End If
If cmbCustCode.Value = "" Or cmbSupplier.Value = "" Or txtOVal.Text = "" Or txtPVol.Text = "" Or txtPVal.Text = "" Then
MsgBox("Not enough required data has been entered, cannot save this order", MsgBoxStyle.OkCancel, "Error")
Exit Sub
End If
If isClear = True Then
Try
setNewValues()
Catch ex As Exception
errorLog(ex)
MsgBox("Unable to save data, refer to error log", MsgBoxStyle.OkOnly, "Error")
Exit Sub
End Try
End If
gOrder.Freight = CDec(txtFVal.Text)
gOrder.AmendedVal = CDec(txtOVal.Text)
gOrder.AmendedVol = CDec(txtPVol.Text)
gOrder.externalNotes = rtbExternalNotes.Text
gOrder.InternalNotes = rtbInternalNotes.Text
gOrder.OrderCancelled = chCancel.Checked
gOrder.CommTotal = CDec(txtCVal.Text)
gOrder.CommVAT = CDec(txtCVat.Text)
Dim dtLines As New DataTable
dtLines = ugProducts.DataSource
Dim dsLines As New DataSet
dsLines.Tables.Add(dtLines.Copy)
Select Case gOrder.Stage
Case 4
Dim proceed As Integer = 0
For Each ugr As UltraGridRow In ugProducts.Rows
If ugr.Cells("Goods_Delivered").Value = False Then
If IsDBNull(ugr.Cells("Final_Delivery").Value) = False Then
ugr.Cells("Final_Delivery").Value = DBNull.Value
End If
If isamend = False Then
MsgBox("Unable to proceed to next stage until supplier(s) goods have been delivered", MsgBoxStyle.OkOnly, "Goods not delivered")
End If
proceed = proceed + 1
End If
If dtFreight Is Nothing Then
gOrder.Save(dsLines, , dtfCleared, isClear)
If chCancel.Checked = True Then
Try
Dim f As New frmOrder(con, False, True, currentUser, , admin)
f.MdiParent = Me.ParentForm
f.Show()
Catch ex As Exception
errorLog(ex)
End Try
End If
Я попытался добавил Me.Close()
как на начало и конец Try, однако, и продолжали давать мне сообщение об ошибке
Enumerator был исчерпан. на Infragistics.Shared.SparseArray.CreateItemEnumerator.EnsureNotExhausted() в Infragistics.Shared.SparseArray.CreateItemEnumerator.System.Collections.IEnumerator.MoveNext() в Infragistics.Win.UltraWinGrid.RowEnumerator.MoveNext()
EDIT
Я думаю, что это потому, что процедура сохранения вызывается из другой подпрограммы. Нажатие кнопки сохранения вызывает подпрограмму, которая имеет дело с нажатием кнопки другой кнопки, и этот код является этой подпрограммой.
Но даже при изменении этого кода на фактический код, который находится на кнопке (удаление косвенности), все равно это происходит?
Итак, как я могу закрыть существующую форму одновременно с открытием новой? Кроме того, не забудьте, что форма открыта, а существующая форма - одна и та же форма, frmOrder
, за исключением того, что существующая форма имела данные в ней, и поэтому некоторые аспекты были немного разными.
Благодаря
Сообщение об ошибке звучит так, как будто ваш код вызывается изнутри какого-то цикла на сетке – Plutonix
@Plutonix Я согласен, вот почему я был в замешательстве. Полный путь исполнения выше. 'gOrder.Save' использует' For Loop' для добавления каждой строки в 'UltraGrid', но это единственная сетка, которая задействована, поэтому не уверен, что происходит. –
. Вы можете открыть окно стека вызовов и проверить это предположение – Plutonix