Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ComboBox.SelectionLength=0引发InvalidArgument异常_C#_.net_Winforms_Combobox - Fatal编程技术网

C# ComboBox.SelectionLength=0引发InvalidArgument异常

C# ComboBox.SelectionLength=0引发InvalidArgument异常,c#,.net,winforms,combobox,C#,.net,Winforms,Combobox,对于组合框,当我将SelectionLength设置为0时,会出现以下错误: “-1470366488”的值对“开始”无效。 参数名称:开始 堆栈跟踪: 在System.Windows.Forms.ComboBox.Select(Int32开始,Int32长度) 在System.Windows.Forms.ComboBox.set_SelectionLength(Int32值)中 在MyCompany.Odin.WebClient.STComplexView.loadViewFormats()上

对于组合框,当我将SelectionLength设置为0时,会出现以下错误:

“-1470366488”的值对“开始”无效。 参数名称:开始 堆栈跟踪: 在System.Windows.Forms.ComboBox.Select(Int32开始,Int32长度) 在System.Windows.Forms.ComboBox.set_SelectionLength(Int32值)中 在MyCompany.Odin.WebClient.STComplexView.loadViewFormats()上 这不是在
Clear()
之后,也不是绑定控件

这段代码中(并非如此)有趣的事情:

//Adding Items to the combo box (6 in total)
// ...
viewFormatComboBox.Items.Add(appResMgr.GetString("STR_6X2_HEXAXIAL"));
viewFormatComboBox.SelectedIndex = 2;
viewFormatComboBox.SelectionLength = 0;   //<<<< The exception is thrown here
呼叫,通过设置SelectionLength触发。我假设SelectionStart用于start参数和viola,我们有上面显示的invalideExceptionArgument

这是在调试代码中。样式是
DropDownStyle
,其他所有内容看起来都不显著,但在调试器中我看到
SelectionStart
属性是-1470366488

这段代码已经存在好几年了,今天我在测试调试构建时第一次遇到了这个异常。我正在选择我想要显示的项目,并显示SelectedIndex=2行,然后在设置SelectionLength时出现异常
有什么解释吗

从异常和调用堆栈来看,最简单的解决方案是插入:

viewFormatComboBox.SelectionStart = 0;
以前

viewFormatComboBox.SelectionLength = 0;

要确保它具有有效值。

从异常和调用堆栈中,最简单的解决方案似乎是插入:

viewFormatComboBox.SelectionStart = 0;
以前

viewFormatComboBox.SelectionLength = 0;

确保它有一个有效值。

以下是关于什么而不是为什么的解释

SelectionLength调用的setter:

this.Select(this.SelectionStart, value);
第一行检查arg的有效性

 if (start < 0)
      {
        throw new ArgumentOutOfRangeException("start", System.Windows.Forms.SR.GetString("InvalidArgument", (object) "start", (object) start.ToString((IFormatProvider) CultureInfo.CurrentCulture)));
      }
消息320(0x140)是CB_GETEDITSEL。根据报告,这应返回:

获取当前字符串的起始和结束字符位置 组合框编辑控件中的选择

显然不是。它回来了——1470366488。为什么?谁知道呢。我猜CB_GETEDITSEL正在返回一个错误,它没有被检查,wParam[0]没有定义,框架只是盲目地使用它


也许在设置SelectionLength之前显式设置SelectionStart(发送CB_SETEDITSEL)可以最大限度地降低发生这种情况的可能性。

以下是对原因的解释

SelectionLength调用的setter:

this.Select(this.SelectionStart, value);
第一行检查arg的有效性

 if (start < 0)
      {
        throw new ArgumentOutOfRangeException("start", System.Windows.Forms.SR.GetString("InvalidArgument", (object) "start", (object) start.ToString((IFormatProvider) CultureInfo.CurrentCulture)));
      }
消息320(0x140)是CB_GETEDITSEL。根据报告,这应返回:

获取当前字符串的起始和结束字符位置 组合框编辑控件中的选择

显然不是。它回来了——1470366488。为什么?谁知道呢。我猜CB_GETEDITSEL正在返回一个错误,它没有被检查,wParam[0]没有定义,框架只是盲目地使用它


也许在设置SelectionLength之前显式设置SelectionStart(发送CB_SETEDITSEL)可以最大限度地降低发生这种情况的可能性。

对于下拉列表的组合框样式,组合框控件实际上没有“文本”框实体。因此,如上所述,设置该对象的SelectionStart或SelectionLength会产生不可预测的结果。正如其他帖子(,)中提到的,也建议不要使用这些属性,我明白为什么了。但是测试这种风格而不设置起始值解决了我们的问题

如果不是Me.DropDownStyle.Equals(Windows.Forms.ComboBoxStyle.DropDownList),那么 Me.SelectionStart=Me.Text.Length 如果结束


希望这对将来的人有所帮助…

对于下拉列表的组合框样式,组合框控件实际上没有“文本”框实体。因此,如上所述,设置该对象的SelectionStart或SelectionLength会产生不可预测的结果。正如其他帖子(,)中提到的,也建议不要使用这些属性,我明白为什么了。但是测试这种风格而不设置起始值解决了我们的问题

如果不是Me.DropDownStyle.Equals(Windows.Forms.ComboBoxStyle.DropDownList),那么 Me.SelectionStart=Me.Text.Length 如果结束


希望这对将来的某个人有所帮助…

我认为问题在于您对
选择的解释。
-您是想在组合框中选择文本,还是想
选择一个项目?嗯。根据例外情况,您为值指定了
-1470366488
,而不是0。您显示的代码实际上不包括设置
SelectedIndex
属性的行,因此我无法判断出哪里出了问题
SelectionStart
SelectedIndex
无关;这可能是造成混淆的原因吗?davisoa-我正在努力确保文本框中没有选择任何文本。Cody-请参阅更新帖子thx.davisoa-我解决了问题中的问题,现在应该更有意义了。谢谢,我认为问题在于您对
选择的解释
-您想在组合框中选择文本,还是想
选择一个项目?嗯。根据例外情况,您为值指定了
-1470366488
,而不是0。您显示的代码实际上不包括设置
SelectedIndex
属性的行,因此我无法判断出哪里出了问题
SelectionStart
SelectedIndex
无关;这可能是造成混淆的原因吗?davisoa-我正在努力确保文本框中没有选择任何文本。Cody-请参阅更新帖子thx.davisoa-我解决了问题中的问题,现在应该更有意义了。谢谢,史蒂文,很好的分解-更接近解释,谢谢!史蒂文,很好的崩溃-更接近解释,谢谢!这就是我所做的,虽然我不确定是什么改变了这个问题。这就是我所做的,虽然我不确定是什么改变了这个问题。