- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在特定情况下遇到以下未处理的异常,我似乎无法弄清楚原因或阻止它:
System.ArgumentOutOfRangeException: InvalidArgument=Value of '0' is not valid for 'index'.
Parameter name: index
at System.Windows.Forms.ComboBox.ObjectCollection.get_Item(Int32 index)
at System.Windows.Forms.ComboBox.get_SelectedItem()
at System.Windows.Forms.ComboBox.get_Text()
at System.Windows.Forms.ComboBox.WmReflectCommand(Message& m)
at System.Windows.Forms.ComboBox.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
有问题的 ComboBox 是已安装驱动器的列表,当刷新驱动器列表时,该列表将被清除并重新填充。
如果软件加载时附加了 0 个驱动器,则单击组合框不会产生上述错误。
如果软件加载时连接了 1 个或多个驱动器,并且在刷新期间没有单击组合框就将它们移除,则之后单击组合框不会产生错误。
如果软件连接了 1 个或多个驱动器,并且当前显示 ComboBox 的下拉列表并且所有驱动器都被删除,则列表为空,但单击空框确实产生以上错误。继续并再次单击会再次导致错误。
当连接/分离驱动器时,将调用包含 ComboBox 的表单上的以下代码:
this.cbxDrives.Items.Clear();
foreach (Drive phone in phones)
this.cbxDrives.Items.Add(phone);
if (this.cbxDrives.Items.Count > 1) {
this.cbxDrives.Items.Add(SynchronisedDrive.Instance);
this.cbxDrives.SelectedIndex = 0;
} else if(this.cbxDrives.Items.Count == 1)
this.cbxDrives.SelectedIndex = 0;
else
this.DriveView.Clear();
this.cbxDrives.DisplayMember = "Name";
另外,我不知道这是否相关,因为异常只提到了基类,但 ComboBox 被覆盖以在文本旁边提供一个图标。其代码如下:
protected override void OnDrawItem(DrawItemEventArgs e)
{
if (e.Index >= 0 && e.Index < Items.Count)
{
e.DrawBackground();
e.DrawFocusRectangle();
Drive item;
Rectangle bounds = e.Bounds;
int offset = 0;
item = (Drive)Items[e.Index];
if (item is SynchronisedDrive)
{
imageList.Draw(e.Graphics, bounds.Left, bounds.Top, (int)IconIndexes.ALL);
offset = imageList.ImageSize.Width;
} else {
if (item.Settings.Type == Settings.DriveTypeEnum.Headset)
{
if (item.Settings.Description.StartsWith("A R"))
{
imageList.Draw(e.Graphics, bounds.Left, bounds.Top, (int)IconIndexes.RED);
offset = imageList.ImageSize.Width;
}
else if (item.Settings.Description.StartsWith("A B"))
{
imageList.Draw(e.Graphics, bounds.Left, bounds.Top, (int)IconIndexes.BLUE);
offset = imageList.ImageSize.Width;
}
else if (item.Settings.Description.StartsWith("A G"))
{
imageList.Draw(e.Graphics, bounds.Left, bounds.Top, (int)IconIndexes.GREEN);
offset = imageList.ImageSize.Width;
}
else if (item.Settings.Description.StartsWith("A P"))
{
imageList.Draw(e.Graphics, bounds.Left, bounds.Top, (int)IconIndexes.PURPLE);
offset = imageList.ImageSize.Width;
}
else if (item.Settings.Description.StartsWith("An"))
{
imageList.Draw(e.Graphics, bounds.Left, bounds.Top, (int)IconIndexes.ORANGE);
offset = imageList.ImageSize.Width;
}
else if (item.Settings.Description.StartsWith("A Y"))
{
imageList.Draw(e.Graphics, bounds.Left, bounds.Top, (int)IconIndexes.YELLOW);
offset = imageList.ImageSize.Width;
}
}
else if (item.Settings.Type == Settings.DriveTypeEnum.RemoteConsole)
{
imageList.Draw(e.Graphics, bounds.Left, bounds.Top, (int)IconIndexes.REMOTE);
offset = imageList.ImageSize.Width;
}
else if (item.Settings.Type == Settings.DriveTypeEnum.LL)
{
imageList.Draw(e.Graphics, bounds.Left, bounds.Top, (int)IconIndexes.LL);
offset = imageList.ImageSize.Width;
}
}
e.Graphics.DrawString(item.Name, e.Font, new
SolidBrush(e.ForeColor), bounds.Left + offset, bounds.Top);
}
base.OnDrawItem(e);
}
最佳答案
这里有一些交叉线程吗?
我的意思是..我是如何刷新列表的。是否有驱动器显示在列表中,它们应该像您所说的那样被附加,如果它们不在列表中那么它不应该被访问?
两种选择:
由于列表是异步更新的。一个正确的解决方案是确保组合框在您的异步方法更新之前被禁用。更新后,它应该会再次启用它。
当所有驱动器都已分离时,为什么不禁用组合框?
您可能还想确保您的异步方法不是在运行中随机地一个接一个地附加项目。我可以看到一个问题是用户在更新组合框时下拉了组合框。您可能想要禁用组合框 >> 然后清除所有的驱动器并将它们添加到列表中。
关于c# - InvalidArgument= '0' 的值无效.. 在 ComboBox.Items.Clear() 之后单击 - .NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5376111/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a min
我有一个包含一些数据的网格(用户列表)。对于每一行,我有许多操作,例如更新、删除、激活、暂停、查看您命名的订单。 而不是放置如此多的按钮,这些按钮将填充超过 400-500像素 我想放置一个组合框,其
在我的一个对话框中,我有以下控制: 我在其他地方填充 ComboBox,如下所示: 但是,如果我没有创建 ComboBox 位,MSI 仍将构
我在项目中为 MVC 使用了 kendo complete。 我有某些形式的国家/地区列表,我显示国家/地区名称,但存储国家/地区代码。 我有以下问题:当用户输入不在列表中的内容时,该值将发送到服务器
我有一个组合框,其中的值是从托管 bean 填充的,如下所示: keywordlist.setConnDB("jdbc:sqlserver://xx.xx.x.xx:1433;DatabaseName
我有一个 ComboBox,它绑定(bind)到 ViewModel 中的复杂类型集合,这些类型的长度可以是任意数量,具体取决于用户的偏好。 我已经创建了一个基于 ComboBox 默认值的样式,并且
我做了一个转换器: public class BooleanToDateConverter implements Converter { private static final long s
编辑:由于 Rob 的回答,我已经更新了下面的代码,现在它可以工作了。 我找到了几页显示如何执行此操作的页面( http://www.cmcrossroads.com/content/view/131
我是 PyQT 的新手。 我有兴趣向 tableView 的每一行添加一个组合框。在 PyQT 4 中可能吗? 我知道,在 QT5 中是可能的,但不确定 PyQT。 预先感谢您的帮助。 最佳答案 如果
我对 JavaFX(8)、HBox、ComboBox 和 HGrow 有问题。 HGrow 不能与 ComboBox 结合使用。 (信息:使用 TextField (而不是 ComboBox),它按预
我有一个 XAML UserControl连接到 ImportPresenter View 模型。有四个ComboBox我的 XAML 中的项目: CashActivityTypeBAI CashAc
我将两个组合框绑定(bind)到同一个 listviewcollection。问题是在一个组合框中选择一个值会导致另一个组合框选定项更改为第一个组合框的确切值。它们是耦合的,我希望它们彼此独立。 My
我正在尝试在 extjs 3.4 中的组合框中的选项之间添加一行。我可以添加该行,但不能用我的远程位置的数据填充它。 (如果我删除修改的 tpl 选项,它就会填充)。 这是我的代码。我只需要在“组”字
我被 WIX 安装程序中的组合框和自定义操作困住了。 我有一个包含几个值的组合框(下拉菜单)。当用户从此下拉列表中选择一个值时,我想在屏幕上显示一些文本(对于下拉列表中的每个项目都是唯一的)。 在 .
我有 ComboBox cbx 和一个包含选项卡的 TabPane(选项卡:t)和一个按钮 b1。因此,单击此按钮 b1 时,它会在 TabPane 中添加一个新选项卡 t,并在包含以下内容的 Com
我有两个组合框:水果和饮料。 fruits 具有字符串:“apple”、“orange”、“banana” drinks 具有字符串:“water”、“coffee”、“juice” 如何制作一个新组
我必须监听什么事件,以便在用户从(可编辑的)WPF ComboBox control 中选择一个选项时得到通知? 我是否必须先访问 Items 属性才能收听 Items.CurrentChanged?
我有以下简单的 QML 组合框: import QtQuick 2.0 import QtQuick.Controls 1.4 import si.mikroelektronika 1.0 Item
当我创建组合框时,列表中没有项目。现在,当我单击下拉按钮时,会调用一个函数(通过 postcommand 选项),但是一旦在我的函数中,我不知道如何在组合框的列表框中设置值。 代码如下: #u
我有两个组合框 我使用 LINQ-to-Entities 来填充 cmbGroup 组合框 Dim db as myDataEntity cmbGroup.ItemsSource = db.Mak
我是一名优秀的程序员,十分优秀!