2016-10-12 3 views
-2

У меня есть (довольно сложный) применение и в некоторых редких случаях (в частности, первый раз при нажатии определенной кнопки) функцияform.ShowDialog (владелец) бросает IndexOutOfRangeException, возможно, вызывает?

public static bool ShowDialogOk(this Form form, IWin32Window owner = null) { 
      return form.ShowDialog(owner) == DialogResult.OK; 

бросить за исключением

{System.IndexOutOfRangeException: Index -1 does not have a value. 
    at System.Windows.Forms.CurrencyManager.get_Item(Int32 index) 
    at System.Windows.Forms.DataGridView.DataGridViewDataConnection.OnRowEnter(DataGridViewCellEventArgs e) 
    at System.Windows.Forms.DataGridView.OnRowEnter(DataGridViewCell& dataGridViewCell, Int32 columnIndex, Int32 rowIndex, Boolean canCreateNewRow, Boolean validationFailureOccurred) 
    at System.Windows.Forms.DataGridView.SetCurrentCellAddressCore(Int32 columnIndex, Int32 rowIndex, Boolean setAnchorCellAddress, Boolean validateCurrentCell, Boolean throughMouseClick) 
    at System.Windows.Forms.DataGridView.OnCellMouseDown(HitTestInfo hti, Boolean isShiftDown, Boolean isControlDown) 
    at System.Windows.Forms.DataGridView.OnCellMouseDown(DataGridViewCellMouseEventArgs e) 
    at System.Windows.Forms.DataGridView.OnMouseDown(MouseEventArgs e) 
    at System.Windows.Forms.Control.WmMouseDown(Message& m, MouseButtons button, Int32 clicks) 
    at System.Windows.Forms.Control.WndProc(Message& m) 
    at System.Windows.Forms.DataGridView.WndProc(Message& m) 
    at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
    at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 
    at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 
    at System.Windows.Forms.Form.ShowDialog(IWin32Window owner) 

Теперь эта функция называется с теми же переменными довольно много раз перед сбоем, что затрудняло мне говорить, что не так. Кто-нибудь знает возможные причины исключения IndexOutOfRangeException в форме. ФункцияShowDialog? Таким образом, я мог бы немного отладить этот код.

Редактировать: Я заметил, что ShowDialogOk вызывается только из 1 места, где, если я помещаю точку останова на эту строку, она передается только при создании графического интерфейса, но не на самом деле, когда срабатывает ошибка.

+0

И перед кем спрашивает, да. Я знаю, что исключение index out of bounds означает, что я выхожу из границ индекса (но я не могу изменить код windows.Forms). Я ищу возможные ситуации, которые могут вызвать эту ошибку в windows.forms. Предыдущие вызовы используют ту же форму, по крайней мере, в мелкой копии, но предоставление кода всего gui будет большим для этого вопроса. – Thijser

+0

StackTrace говорит мне, что проблема связана с вашим «DataGridView». Вы добавляете что-то, когда открывается форма? Вы заставляете MouseClick? Я не думаю, что код, который вы показываете, является причиной проблемы. – jAC

+0

Код не заставляет mouseclick, но отвечает на mouseclick здесь. – Thijser

ответ

-1

Адрес отеля:. (Это свойство в классе формы, и его, вероятно, используется в случае сетки (строка ввода или somrthing)) (предположим, что это свойство, потому что: CurrencyManager.get_Item (индекс Int32))

var index = <somenumber>; 
if(CurrencyManager.Length > 0 && index < CurrencyManager.Length) //also can be Count() 
    CurrencyManager[index] 
else 
    // Do some logic when index is out of bounds. 
+0

Проблема в том, что слова CurrencyManager не отображаются нигде в моем коде. Происходит то, что проблема возникает где-то внутри окон.формы, и я не могу туда попасть. – Thijser

+0

Вынимайте, удаляйте, комментируйте, любой формат валюты в этой форме и посмотрите, работает ли она. (его просто временно) –

+0

Yhea Я пробовал, что проблема в том, что рассматриваемая форма - это действительно просто datagridview со списком кнопок в нем, где прямо сейчас появляется одна новая кнопка, каждая кнопка нажимает, когда я нажимаю первую кнопку, которую он бросает эта ошибка. – Thijser

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