Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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#程序异常_C#_Winforms_Combobox - Fatal编程技术网

C#程序异常

C#程序异常,c#,winforms,combobox,C#,Winforms,Combobox,发生异常。指定了异常。强制转换无效 int s = (int)comboBox1.SelectedItem; 这意味着组合框项目中的值不是inttry int s = int.Parse(comboBox1.SelectedItem.ToString()); 您不能仅通过强制转换将任何对象转换为int。如果您有字符串,则需要使用将字符串转换为int 如果在组合框中插入自己的对象作为项目,则可以将comboBox1转换为您的类型 ComboBox.SelectedItem.ToString()

发生异常。指定了异常。强制转换无效

int s = (int)comboBox1.SelectedItem;

这意味着组合框项目中的值不是
int

try

int s = int.Parse(comboBox1.SelectedItem.ToString());
您不能仅通过强制转换将任何对象转换为
int
。如果您有
字符串
,则需要使用将
字符串
转换为
int

如果在组合框中插入自己的对象作为项目,则可以将
comboBox1转换为您的类型


ComboBox.SelectedItem.ToString()
仅当在ComboBox中插入了字符串对象时才返回内容,更可靠的方法是检查属性。这也将使您免于一些
null
检查。

检查SelectedIndex>-1或SelectedItem!=null

您试图将组合框项强制转换为int

试一试


如果您想要项目的索引。

如果您想要获得组合框中显示的值,可能您应该尝试:

int s = (int)comboBox.SelectedValue;
MSDN上的示例用法

但实际上,您需要在问题中提供更多细节:)

总猜测,但一个常见的做法可能是在ComboBox值属性中存储数据库id,在text属性中存储数据库项文本。如果这就是您正在做的,那么如果您确定combobox的值总是可以强制转换为int,那么您可以使用下面的语法

int i = (int)ComboBox1.SelectedValue.ToString();
或者如果你不确定它总是整数,你可以

try
{
int i = int.Parse(ComboBox1.SelectedValue.ToString());
}
catch
{
//handle the non int situation here
}



尝试
Convert.ToInt32(combo.Items[combo.SelectedIndex].Value.ToString())

@leppie如果sheena想要获取所选项目的索引,而不是所选项目本身的值,我不会感到惊讶。所以这个建议是有意义的,即使它是一个假设(你几乎被迫这样做,因为这个问题包含的信息太少)。@Rob:你在假设,我不是。从所选项目中获取
int
有什么问题?没有什么!如果OP想要从SelectedItem中得到int,他很可能知道他需要进行某种转换。在我看来,很明显他想要所选项目的索引。@leppie我当然是在做假设,但我已经解释了原因。正如@leppie所说,它确实假设组合框中的所有值都是int
SelectedItem.ToString()
将产生类似于
System.Net.UI.Controls.ComboBoxItem.或任何无法解析为int的
的内容。这根本不起作用。@David:如果内容是字符串,它会起作用。我将编辑我的帖子,推荐comboBox1.Text。@David Hedlund:你在说什么?ASP.NET中没有组合框。@leppie:因此出现了
或其他任何类型的组合框。我没有费心去看这个类到底属于哪里,因为这根本不是我的重点。@Albin:是的,使用
.Text
我对你的解决方案一点问题都没有=)我们可以猜到你在想为什么会出现这个错误,以及如何消除它。。。但是,如果你付出一点额外的努力,并把它作为一个问题来表达,而不是让我们去猜测,那就太好了。你是想得到存储在组合框中的索引还是值?请指定,以便可以给出有意义的答案。发生异常。不是真正的问题
抛出新异常(“不是真正的问题”)
@David Hedlund:
抛出新的DavidHedlundDoesNotUnderstandException()
抛出新的ArgumentOutofOffeeException(“leppie”)
=)当OP陈述一个问题时,我会理解这个问题。在此之前,我可以像其他任何人一样进行猜测,但我不希望(
返回MarksArgument;
)这一切都取决于您如何绑定ValueMember。但如果保留默认值并为空,它应该可以工作。但如果所选项目失败,也将失败。是。但是我们应该猜这种细节吗…?为什么-1?我不认为@Brissles是错的,除了一个缺陷:
s=(int)comboBox1。SelectedIndex
,不需要
(int)
,因为
SelectedIndex
是一个
int
。@Danny:1可能是因为有人反对OP试图得到的
SelectedIndex
的假设。我自己对这个假设没有异议。考虑到完全没有实际问题,我想我们都可以自由地填补这里的空白。@David:没错。有些老年退休金计划没有很好地描述他们的问题,这不是因为他们懒惰或者他们不想这样做。原因可能是他们不熟悉这个问题。所以我认为一个好的答案应该指出错误,而给出一个可能的解决方案更为重要。这个答案绝对正确,但毫无用处。OP仍然不知道他应该做什么。我更喜欢那些被否决的答案,这对初学者更有帮助。@Danny:这个问题现在已经完全被正切的讨论占据了,所以我不确定OP是否能够从中提取出任何有价值的东西,但最终,接受勾号是OP发现最有用的东西的唯一标志,所以我相信这会自行解决的。话虽如此,我同意被否决的答案所作的假设并非毫无意义。当你在做一个假设时,指出这一点总是一个很好的实践,不过:“嘿,如果你想做的是A,那么你可以做,这个,如果你真的是指B,那么…”
int i = (int)ComboBox1.SelectedValue.ToString();
try
{
int i = int.Parse(ComboBox1.SelectedValue.ToString());
}
catch
{
//handle the non int situation here
}
int i;
bool result = int.TryParse(ComboBox1.SelectedValue.ToString(), out i);

            if (result)
            {
                //you can use the variable i now
            }
            else
            {
                //The parse failed so handle a non int situation here
            }