2016-09-23 2 views
0

У меня есть следующий код. Цель состоит в том, чтобы после сохранения заказа оно было отменено, а затем я хочу, чтобы он показывал «Новый заказ», Форма - это прекрасно!Как закрыть форму после открытия еще одного над ней

Однако, как только новая форма была открыта, я хочу, чтобы первоначальная форма с отмененным заказом была закрыта.

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, за исключением того, что существующая форма имела данные в ней, и поэтому некоторые аспекты были немного разными.

Благодаря

+0

Сообщение об ошибке звучит так, как будто ваш код вызывается изнутри какого-то цикла на сетке – Plutonix

+0

@Plutonix Я согласен, вот почему я был в замешательстве. Полный путь исполнения выше. 'gOrder.Save' использует' For Loop' для добавления каждой строки в 'UltraGrid', но это единственная сетка, которая задействована, поэтому не уверен, что происходит. –

+0

. Вы можете открыть окно стека вызовов и проверить это предположение – Plutonix

ответ

0

Вы в значительной степени решить эту проблему в вашем редактирования.

Первоначально было бы так, что слишком много подводных лодок использовались/открывались сразу. Перемещение его теперь не сработало, потому что оно все еще находится в Select Case.

Если вы переместите Me.Close() наружу Select Case, тогда он будет работать нормально.

Смежные вопросы