ComboBoxの中身計算?


ココ  2008-10-21 20:39:51  No: 140688

はじめまして!

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


YuO  2008-10-21 23:17:45  No: 140689

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

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


ココ  2008-10-22 20:58:15  No: 140690

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

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

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

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


YuO  2008-10-22 21:39:38  No: 140691

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使って加算していくのがよいと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加