Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
コントロールをまとめて操作。
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30323#CommentId83232
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2018/5/15 20:26:04
> 社会人
業務開発でしょうか。
常に『データ型』を意識してコーディングする癖をつけましょう。
> For Each o As Control In Me.Controls
> If TypeOf o Is TextBox Then
先の例のように、OfType で絞り込んだ方が手っ取り早いかと。
> empty = (Controls.OfType(Of TextBox)().Count(Function(t) t.TextLength = 0))
Controls を For Each している最中に、その
Controls を再列挙しているようですね。
わざわざ二重に列挙しているのは何故ですか?
> ElseIf o.Text <= 0 Then
Text プロパティは String 型で、
0 というリテラルは Integer 型ですよね。
「<=」の左右で、データ型が違っていますので、これだと
Double 型の比較式として処理されてしまいます。
(なので、Text の内容が Double として解釈できない時にエラーになるわけで)
数値入力に特化させたいのなら、TextBox1.Text ではなく、
NumericUpDown1.Value の利用をお奨めします。(Value は Decimal 型です)
NumericUpDown なら、小数部の桁数や最大値、最小値などを、
デザイン時に決めておくことができますし、数値以外の入力も防げます。
どうしても TextBox が必要なら、数値として変換できることを保証するために、
TryParse メソッドを併用すべきです。
> Dim empty As Integer
> If empty Then
ここは 『If empty > 0 Then』 なのでは?
> テキストボックスの変数はDoubleで宣言しています
「テキストボックスの変数」というのは、どういう意味でしょうか。
たとえば、
Dim t As TextBox = TextBox1
Dim s As String = TextBox1.Text
とは書けても、
Dim d As Double = TextBox1
とは書けないですよね。
もしかして、
Dim d As Double = TextBox1.Text
ということでしょうか?
だとしたらそれは間違いです。(代入式の左辺が Double 型で、右辺が String 型なので)
こういう場合には、TryParse メソッドを使いましょう。
Dim
d
As
Double
= 0.0
If
Double
.TryParse(TextBox1.Text, d)
Then