【问题标题】:c# InvalidArgument=Value of '-1' is not valid for 'index'c# InvalidArgument='-1' 的值对'index' 无效
【发布时间】:2016-10-09 15:45:09
【问题描述】:

我有一个 cmbPlace(combobox),它是用 System.IO 驱动器(C:\、D:\ 等)自动填充的项目。虽然它也有验证事件。代码如下:

using System.IO;
public FNamefile()
{
    InitializeComponent();
    DriveInfo[] allDrives = DriveInfo.GetDrives();
    foreach (DriveInfo d in allDrives)
    {
        cmbPlace.Items.Add(d.Name);
    }
}

private void FNamefile_Load(object sender, EventArgs e)
{
   errorProvider1.ContainerControl = this;
}

private bool ValidatePlace()
{
   bool bStatus = true;
   int m = cmbPlace.SelectedIndex;
   if ((cmbPlace.Items[m]).ToString() == cmbPlace.Text)
   {
       errorProvider1.SetError(cmbPlace, "");
   }
   else if (cmbPlace.Text == "" || (cmbPlace.Items[m]).ToString() != cmbPlace.Text)
   {
       errorProvider1.SetError(cmbPlace, "Please enter a valid location");
       bStatus = false;
   }
   return bStatus;
}
private void cmbPlace_Validating(object sender, CancelEventArgs e)
{
    ValidatePlace();
    int m = cmbPlace.SelectedIndex;

    if ((cmbPlace.Items[m]).ToString() == cmbPlace.Text)
    {  }
    else
    {
         cmbPlace.Focus();
    }
}

问题是当我尝试测试验证 errormessage1 和 cmbPlace.Focus() (如输入“null”或“不在索引中”文本)时,它们不会触发并显示错误

InvalidArgument='-1' 的值对'index' 无效。参数名称:索引

这是导致错误的行/代码,在 ValidatePlacecmbPlace_Validating

if ((cmbPlace.Items[m]).ToString() == cmbPlace.Text)

【问题讨论】:

  • 看起来您正在分配或尝试从具有负值的数组中获取值。这是不可能的。数组总是从 0 开始。
  • SelectedIndex 在未选择任何内容时为 -1。你需要经常检查if (cmbPlace.SelectedIndex >= 0)
  • @user3185569 哇,好用,非常感谢!
  • @Calcius_Bitz 好消息.. 已发布答案。

标签: c# winforms validation


【解决方案1】:

正如我在 cmets 中发布的,当没有选择任何项目时,SelectedIndex 属性返回 -1,这是按索引访问数组元素的无效索引(使用 cmbPlace.Items[m])。话虽如此,您需要在访问所选元素之前进行检查:

if(cmbPlace.SelectedIndex >= 0)
{
   // do something
}
else
{
  // No item selected, handle that or return
}

【讨论】:

    猜你喜欢
    • 2022-12-03
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    相关资源
    最近更新 更多