【发布时间】: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' 无效。参数名称:索引
这是导致错误的行/代码,在 ValidatePlace 和 cmbPlace_Validating
if ((cmbPlace.Items[m]).ToString() == cmbPlace.Text)
【问题讨论】:
-
看起来您正在分配或尝试从具有负值的数组中获取值。这是不可能的。数组总是从 0 开始。
-
SelectedIndex在未选择任何内容时为 -1。你需要经常检查if (cmbPlace.SelectedIndex >= 0) -
@user3185569 哇,好用,非常感谢!
-
@Calcius_Bitz 好消息.. 已发布答案。
标签: c# winforms validation