2016-01-11 9 views
0

У меня есть локальный юг, который позволяет пользователю перемещать строку datagridview, вызванную нажатием кнопки. Суб работает отлично в отладчике, но когда он выходит из управления, он переносится в вызывающую форму, то есть текущая форма закрывается. Это также происходит, когда ни одна строка не перемещается, то есть когда выполняется одно из условий прерывания на входе. Просто: выход из этого раздела закроет форму!?!vb2013 выход из локального закрытия закрывает форму

Private Sub btnMove_Click(sender As Object, e As EventArgs) Handles btnMove.Click 
    Dim rowToGo As DataGridViewRow 
    Dim rtgIndex As Integer = 0 
    If (dgvAuftrag.RowCount <= 1) or (dgvAuftrag.CurrentRow Is Nothing) Then 
     Beep() 
     Exit Sub 
    End If 
    rowToGo = dgvAuftrag.CurrentRow 
    rtgIndex = rowToGo.Index + 1 
    If (rtgIndex >= dgvAuftrag.RowCount) Then rtgIndex = 0 
    Try 
     dgvAuftrag.Rows.Remove(rowToGo) 
     dgvAuftrag.Rows.Insert(rtgIndex, rowToGo) 
    Catch ex As Exception 
     IssueErrorMessage(ex) 
    End Try 
End Sub 

Все остальные локальные подсистемы и функции работают нормально, только этот ведет себя странно. Любые идеи, как исправить/избежать этой ошибки?

+0

Добавить обработчик события для события FormClosing формы. Установите на него контрольную точку и посмотрите на стек вызовов. –

+0

Спасибо, Ханс. Стек стека показывает, что 'FormClosing' был вызван' Sub ShowDialog'. Странно, потому что это «перегрузка», чтобы иметь возможность передавать параметры в форму. Все, что он делает, это скопировать параметры в локальные формы vars и 'Call MyBase.ShowDialog()'. –

+0

ShowDialog() скорее относится к проблеме, эта информация относится к вопросу. Найдите код, который присваивает свойство DialogResult формы. Посмотрите на свойство кнопки DialogResult. –

ответ

0

Это не решение проблемы, а работающий обходной путь, основанный на санкционировании Ганса. Я ввел глобальную логическую переменную с именем OKtoExit, которая инициализируется значением false.

private OKtoExit as boolean = false 

Затем у меня есть новый обработчик события FormClose, который проверяет, что var. Если OKtoExit имеет значение false, e.Cancel = true, и обработчик завершает работу. Регулярные функции выхода (Save and Quit) устанавливают OKtoExit в true, любой другой код оставляет значения неизменными.

Private Sub Current_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing 
    If Not exitOK Then 
     e.Cancel = True 
     Exit Sub 
    End If 
End Sub 

Как я уже сказал, это всего лишь обходное решение, которое имеет тот же эффект, что и нормальный VB-код. Я был бы признателен, если бы кто-нибудь мог представить реальное решение!

0

После многих месяцев я обнаружил истинную причину проблемы, и я должен отдать все кредиты Хансу Пассанту: у меня была кнопка на одной из первых форм, у которой свойство Dialog Result установлено на Cancel. Это была очень красивая кнопка, поэтому многие другие кнопки в приложении были копией этой первой кнопки, где я только что изменил ярлык. Таким образом, все они привели к нежелательному поведению, что форма была закрыта, как только пользователь нажал на один из них, независимо от того, что сказал лейбл ... Через несколько месяцев я обнаружил это случайно. Спасибо Гансу снова, я, очевидно, упустил его последний намек: «И посмотри на свойство кнопки« Диалог ».»!

+0

Хотя это хорошая история, вы должны сделать свои ответы максимально лаконичными. Возможно, вам следует процитировать то, что сказал [Hans Passant] (http://stackoverflow.com/users/17034/hans-passant) и оставить его на этом :-) –

+0

Я не знаю Гедиминаса Масайтиса, где вы были воспитаны. В моей стране хорошие манеры сказать спасибо, если кто-то помог вам. Если вы считаете, что это могло быть сделано короче, и вы, вероятно, правы, пожалуйста, оставьте мне свой адрес электронной почты, вы можете написать для меня сообщения в будущем ... –

+0

Вы должны проверить [этот вопрос] (http: /meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts) и ответы на мета-мета. Общий консенсус здесь заключается в том, что «привет», «спасибо» и это просто пух, который мешает читаемости и краткости ответов. Мое личное убеждение на самом деле немного отличается от этого, но я просто советую вам следовать рекомендациям сайта –

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

  • Нет связанных вопросов^_^