C# c中的ArgumentOutOfRange异常#

C# c中的ArgumentOutOfRange异常#,c#,winforms,exception,C#,Winforms,Exception,我试图在windows窗体中访问DataGridView控件中所选行的列名,但得到以下代码的ArgumenOutOfRange异常: MessageBox.Show(dataGridView1.SelectedColumns[dataGridView1.CurrentCell.ColumnIndex].ToString()); 制作: ArgumentOutOfRangeException was unhandled Index was out of range. Must be non-n

我试图在windows窗体中访问DataGridView控件中所选行的列名,但得到以下代码的ArgumenOutOfRange异常:

MessageBox.Show(dataGridView1.SelectedColumns[dataGridView1.CurrentCell.ColumnIndex].ToString());
制作:

ArgumentOutOfRangeException was unhandled

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
有谁能告诉我如何克服这个错误吗?

属性可以返回-1(从文档中):

包含的列的索引 细胞-1如果该单元格不可用 包含在一列中


您可能是这样的吗?

如果我没有错,那么您可能应该从
集合中获取列值,而不是从
所选列
集合中获取列值

dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex]

SelectedColumns
是一个只包含所选列的列表(是的,它就是这样工作的)。因此,此列表大小不同于
属性列表的大小(这显然是您想要的)


DataGridView.SelectedColumns集合是DataGridView.Columns的单独集合,可以具有不同的列集(子集)

例如,如果有5列视图,并且选择了第三列和第四列,则

DataGridView.SelectedColumns.Count == 2
DataGridView.Columns.Count == 5
如果您使用的是第四列(索引为3),那么代码将变为

DataGridView.SelectedColumns[3]
它(正确地)爆炸了一个索引

总之,在您的情况下,应该使用Columns属性,而不是SelectedColumns

DataGridView.SelectedColumns[3]