StackOverFlowException в пользовательском элементе
Очень часто мне необходимо в элементе DataGridView отображать по умолчанию вертикальный скролбар. Для этих целей я использую простенький расширитель для стандартного контрола.
internal partial class CustomDataGridView : DataGridView
{
internal CustomDataGridView() : base()
{
this.VerticalScrollBar.Visible = true;
this.VerticalScrollBar.VisibleChanged += new EventHandler(VerticalScrollBar_VisibleChanged);
}
internal void VerticalScrollBar_VisibleChanged(object sender, EventArgs e)
{
if (!this.VerticalScrollBar.Visible)
{
this.VerticalScrollBar.Location = new Point(this.ClientRectangle.Width - this.VerticalScrollBar.Width - 1, 1);
this.VerticalScrollBar.Height = this.ClientRectangle.Height - 2;
this.VerticalScrollBar.Width = this.VerticalScrollBar.Width;
this.VerticalScrollBar.Show();
}
}
}
Недавно заметил что при повторном заполнении CustomDataGridView вываливается непонятно откуда появляющееся сообщение. Частота появления непредсказуема. Может 20 раз обновиться без проблем, а может при первом же обновлении выдать это:
Сам код работы с контролом такой:
public void writeNameTable(NameTable NameTable)
{
if (InvokeRequired)
{
BeginInvoke(new writeNameTableDelegate(writeNameTable), new object[] { NameTable });
return;
}
this.dataGridView1.Rows.Clear();
NAME_TABLE = NameTable.NAMES;
for (int i = 0; i < NAME_TABLE.Length; i++)
{
this.dataGridView1.Rows.Add(1);
int index = this.dataGridView1.Rows.GetLastRow(DataGridViewElementStates.Visible);
this.dataGridView1.Rows[index].Cells[0].Value = i.ToString();
this.dataGridView1.Rows[index].Cells[1].Value = NAME_TABLE[i].Name;
this.dataGridView1.Rows[index].Cells[2].Value = ((ObjectFlags)NAME_TABLE[i].ObjectFlag).ToString();
}
}
Вопрос: как отловить/исправить подобное исключение?