ComboBoxの中身計算?


ココ  2008-10-21 11:39:51  No: 140688  IP: 192.*.*.*

はじめまして!

VB初めて3日目なのですが今サイトで「VB課題」というのをやってみてます。
そこでボタンを押すとComboBoxの中の値(例えば10,20,30が入ってるとします)が足され、Labelに60という答えを出したいのですがComboBoxの中の計算はどうやればいいのでしょうか?

編集 削除
YuO  2008-10-21 14:17:45  No: 140689  IP: 192.*.*.*

VBのバージョンはなんでしょうか。
また,何のComboBoxでしょうか。

とりあえず,VB 2008 + WinFormとして,
Label1.Text = ComboBox1.Items.Cast(Of Integer).Sum().ToString()
でできます。
System.Linq.Enumerableに頼り切っていますが……。
# あんまり簡単なので,答え書いちゃいましたが……。

編集 削除
ココ  2008-10-22 11:58:15  No: 140690  IP: 192.*.*.*

YuOさんありがとうございます。
VBは2005でComboBoxはSystem.Windows.Forms.ComboBoxです。

YuOさんの書いてある通りに書いてみたらCastのところで

エラー  1  'Cast' は 'System.Windows.Forms.ComboBox.ObjectCollection' のメンバではありません。

と出ますがこれはCastというものがないということですか?

編集 削除
YuO  2008-10-22 12:39:38  No: 140691  IP: 192.*.*.*

VB 2008 (というか,.NET Framework 3.5というか) の新機能で,拡張メソッドというものを使っています。

このCastやSumというメソッドは,実際には
System.Linq.Enumerable.Cast
System.Linq.Enumerable.Sum
になります。ただ,特殊な属性がついているために,コンパイラが自動で
Label1.Text = System.Linq.Enumerable.Sum(System.Linq.Enumerable.Cast(Of Integer)(ComboBox1.Items)).ToString()
と読み替えてくれます。

System.Linq名前空間は.NET Framework 3.5での追加なので,VB 2005では基本的に使えません。
まぁ,.NET Framework 3.5導入して,System.Core.dllを参照すれば使えないこともないのですが,お勧め出来ません。
他にどんな副作用があるかわからないので。
# 現在やってるプロジェクト@VC#2005ではEnumerableクラス作った……。


VB 2005であるならば,素直にFor Each使って加算していくのがよいと思います。

編集 削除