1
私は、System.IOドライブ(C:\、D:\など)で自動的に入力されるcmbPlace(コンボボックス)を持っています。検証中のイベントもあります。以下のコードは:私は、検証errormessage1と入力「ヌル」または「ないインデックスで」テキストのようcmbPlace.Focusを()をテストしようとしたときc#InvalidArgument =値 '-1'は 'index'には無効
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();
}
}
問題があり、彼らはトリガされませんし、ショーのエラー
InvalidArgument = '-1'の値は 'index'には無効です。パラメータ名:インデックスここ
にはアイテムがSelectedIndex
プロパティが選択されていない行/ ValidatePlace
で、エラーの原因となるコードとcmbPlace_Validating
if ((cmbPlace.Items[m]).ToString() == cmbPlace.Text)
負の値を持つ配列から値を取得または取得しようとしているようです。それは不可能です。配列は常に0から始まります。 – VDWWD
何も選択されていない場合、 'SelectedIndex'は-1です。 'if(cmbPlace.SelectedIndex> = 0)'で確認する必要があります。 – user3185569
@ user3185569うわー、うまくいきました、ありがとう! –