はじめまして!
VB初めて3日目なのですが今サイトで「VB課題」というのをやってみてます。
そこでボタンを押すとComboBoxの中の値(例えば10,20,30が入ってるとします)が足され、Labelに60という答えを出したいのですがComboBoxの中の計算はどうやればいいのでしょうか?
VBのバージョンはなんでしょうか。
また,何のComboBoxでしょうか。
とりあえず,VB 2008 + WinFormとして,
Label1.Text = ComboBox1.Items.Cast(Of Integer).Sum().ToString()
でできます。
System.Linq.Enumerableに頼り切っていますが……。
# あんまり簡単なので,答え書いちゃいましたが……。
YuOさんありがとうございます。
VBは2005でComboBoxはSystem.Windows.Forms.ComboBoxです。
YuOさんの書いてある通りに書いてみたらCastのところで
エラー 1 'Cast' は 'System.Windows.Forms.ComboBox.ObjectCollection' のメンバではありません。
と出ますがこれはCastというものがないということですか?
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使って加算していくのがよいと思います。