このプログラムは
例えば3 3 4とテキストボックスに数字が打ち込まれると
3×3行列が4個分 のテキストボックスがでてきます。
ここに数字を打ち込んでいき、ボタン2を押すと3×3のテキスト
トボックスが出てくると同時に足し算した結果が出てくるようにしたいです。
以下のプログラムはできたところまで作成しています。
どこを直せばよいのでしょうか。
Public Class Form1
Private number As Integer
Private rows As Integer
Private columns As Integer
Private Sub Form11_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For i As Integer = 1 To 3
AddHandler Me.Controls("TextBox" & i).TextChanged, AddressOf TextBox_TextChanged
Next
End Sub
Private Sub TextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
If System.Text.RegularExpressions.Regex.IsMatch(CType(sender, TextBox).Text, "[^0-9]") Then
MessageBox.Show("数字で入力してください", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
With CType(sender, TextBox)
.Text = .Text.Substring(0, .Text.Length - 1)
.SelectionStart = .Text.Length
End With
End If
Dim cnt1 As Integer
Dim cnt2 As Integer
Dim cnt3 As Integer
If Integer.TryParse(TextBox1.Text, cnt1) And Integer.TryParse(TextBox2.Text, cnt2) And Integer.TryParse(TextBox3.Text, cnt3) Then
For k = 1 To cnt3
For i = 1 To cnt1
For j = 1 To cnt2
Dim tb As TextBox = New TextBox()
tb.Name = "tb" + i.ToString()
Me.Controls.Add(tb)
tb.Top = (i - 1) * 28 + 55
tb.Left = (j - 1) * 30 + 40 * (cnt2 * (k - 1)) + 10
tb.Width = 25
Next
Next
Next
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Bounds = New Rectangle(10, 10, 1350, 800)
Me.AutoScroll = True
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim sum As Double
Dim cnt As Integer = 0
For i As Integer = 1 To rows
For j As Integer = 1 To columns
Dim tb As TextBox = New TextBox()
cnt += 1 : If cnt > rows * columns Then cnt = 1
tb.Name = "tb" + cnt.ToString
Me.Controls.Add(tb)
tb.Top = (i - 1) * 30 + (80 + 40 * rows)
tb.Left = (j - 1) * 60 + 10
tb.Width = 40
sum = 0
For k As Integer = 1 To number
sum += Double.Parse(CType(Me.Controls("tb" + (cnt + (rows * columns * (k - 1))).ToString()), TextBox).Text)
Next
tb.Text = sum.ToString()
Next
Next
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
End Sub
Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
End Sub
Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged
End Sub
End Class
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
No5です。
>5 5 5などの少し大きな値を入力した場合一番最後(の5番目)の行列のテキストボックスが出てこず、
>和も出てこないのですが、何故なのでしょうか。
こちらの環境ではフォームをスクロール(あるいは広げてやる)させれば5×5×5のテキストボックスの表示と
和の5×5のテキストボックスは表示されますよ。
なのでコード上の問題よりパソコンのスペック的なものなのか?
としか言えないかも・・・・・
⇒結構こちらでも描画は負担がかかっていますけどね。
一応こちらは
APU: AMD A8-3870
グラフィック:APU内蔵
メモリ:16GB(うち13GBはRAMディスクでページングファイル3.5GB含む)
OS:WindowsXP SP2
です。
これ以上のスペックのパソコンであるなら可能なはずだとは思いますけどとしか、
言えないですね。
No.5
- 回答日時:
No4です。
上手くイメージできませんけど
それぞれの塊について”何個目”と左側に
表示するものです。
Private number As Integer
Private rows As Integer
Private columns As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Bounds = New Rectangle(10, 10, 1350, 800)
Me.AutoScroll = True
For i As Integer = 1 To 3
AddHandler Me.Controls("TextBox" & i).TextChanged, AddressOf TextBox_TextChanged
Next
End Sub
Private Sub TextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
If System.Text.RegularExpressions.Regex.IsMatch(CType(sender, TextBox).Text, "[^0-9]") Then
MessageBox.Show("数字で入力してください", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
With CType(sender, TextBox)
.Text = .Text.Substring(0, .Text.Length - 1)
.SelectionStart = .Text.Length
End With
End If
If Integer.TryParse(TextBox1.Text, rows) AndAlso Integer.TryParse(TextBox2.Text, columns) _
AndAlso Integer.TryParse(TextBox3.Text, number) Then
Dim cnt As Integer = 0
For k As Integer = 1 To number
Dim lb As Label = New Label()
lb.Name = "Label" + k.ToString()
lb.Top = 40 * (rows * (k - 1)) + 63
lb.Left = 5
lb.Text = String.Format("{0}個目", k)
lb.Width = 50
Me.Controls.Add(lb)
For i As Integer = 1 To rows
For j As Integer = 1 To columns
Dim tb As TextBox = New TextBox()
cnt += 1
tb.Name = "tb" + cnt.ToString()
Me.Controls.Add(tb)
tb.Top = (i - 1) * 30 + 40 * (rows * (k - 1)) + 60
tb.Left = (j - 1) * 60 + 80
tb.Width = 50
Next
Next
Next
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim sum As Integer
Dim cnt As Integer = 0
For i As Integer = 1 To rows
For j As Integer = 1 To columns
Dim tb As TextBox = New TextBox()
cnt += 1 : If cnt > rows * columns Then cnt = 1
tb.Name = "tbA" + cnt.ToString()
Me.Controls.Add(tb)
tb.Top = (i - 1) * 30 + 60
tb.Left = (j - 1) * 60 + (70 * columns) + 80
tb.Width = 40
sum = 0
For k As Integer = 1 To number
sum += Double.Parse(CType(Me.Controls("tb" + (cnt + (rows * columns * (k - 1))).ToString()), TextBox).Text)
Next
tb.Text = sum.ToString()
Next
Next
End Sub
もし違うようであれば画像添付にて
イメージを表示してください。
http://mbsupport.dip.jp/watson/print.htm
この回答への補足
ありがとうございます。
3 3 3などの小さい値を入力したときはうまくいくのですが、
5 5 5などの少し大きな値を入力した場合一番最後(の5番目)の行列のテキストボックスが出てこず、和も出てこないのですが、何故なのでしょうか。
No.4
- 回答日時:
Private number As Integer
Private rows As Integer
Private columns As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Bounds = New Rectangle(10, 10, 1350, 800)
Me.AutoScroll = True
For i As Integer = 1 To 3
AddHandler Me.Controls("TextBox" & i).TextChanged, AddressOf TextBox_TextChanged
Next
End Sub
Private Sub TextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
If System.Text.RegularExpressions.Regex.IsMatch(CType(sender, TextBox).Text, "[^0-9]") Then
MessageBox.Show("数字で入力してください", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
With CType(sender, TextBox)
.Text = .Text.Substring(0, .Text.Length - 1)
.SelectionStart = .Text.Length
End With
End If
If Integer.TryParse(TextBox1.Text, rows) AndAlso Integer.TryParse(TextBox2.Text, columns) _
AndAlso Integer.TryParse(TextBox3.Text, number) Then
Dim cnt As Integer = 0
For k As Integer = 1 To number
For i As Integer = 1 To rows
For j As Integer = 1 To columns
Dim tb As TextBox = New TextBox()
cnt += 1
tb.Name = "tb" + cnt.ToString()
Me.Controls.Add(tb)
tb.Top = (i - 1) * 30 + 40 * (rows * (k - 1)) + 60
tb.Left = (j - 1) * 60 + 70
tb.Width = 50
Next
Next
Next
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim sum As Integer
Dim cnt As Integer = 0
For i As Integer = 1 To rows
For j As Integer = 1 To columns
Dim tb As TextBox = New TextBox()
cnt += 1 : If cnt > rows * columns Then cnt = 1
tb.Name = "tbA" + cnt.ToString()
Me.Controls.Add(tb)
tb.Top = (i - 1) * 30 + 60
tb.Left = (j - 1) * 60 + (70 * columns) + 70
tb.Width = 40
sum = 0
For k As Integer = 1 To number
sum += Integer.Parse(CType(Me.Controls("tb" + (cnt + (rows * columns * (k - 1))).ToString()), TextBox).Text)
Next
tb.Text = sum.ToString()
Next
Next
End Sub
一例まで。
この回答への補足
ありがとうございます。
もう1つ質問です。
このプログラムに以下のような機能をつけたいです。
1個目の行列
2個目の行列
3個目の行列
とわかるように
テキストボックスが入力した値分出てきたときに
1個目
2個目
3個目というラベルも表示されるようにしたいのですが、
どのようにしたらできるのでしょうか。
No.3
- 回答日時:
元の質問
http://okwave.jp/qa/q8131574.html
のNo2の回答の方がマシな状態かな?
⇒No3は編集で手修正したらか
カッコの位置が変わってしまっている。
その回答者として言えることはFindは不要だと思います。
⇒Findメソッドって存在の確認ですよね?
存在は確実であるからあえてチェックの必要性は
ないと思っているんですが、
エラー対策としては必要なのかな?
あとはどこからどんな回答(考え?)があってコードが混乱しているのか
わかりませんけど、まずはやりたい事を書き出して行っては如何ですかね?
No.2
- 回答日時:
Controlsの配列を名前で検索しているので、Findメソッドを利用してください。
Double.Parse(CType(Me.Controls.Find("tb" + (cnt + (rows * columns * (k - 1))).ToString()), TextBox).Text
この回答への補足
sum += Double.Parse(CType(Me.Controls.Find("tb" + (cnt + (rows * columns * (k - 1))).ToString()), TextBox).Text)
引数が足りないとエラーが出るのですが、なぜなのでしょうか。
No.1
- 回答日時:
こちらでやろうとしている事と
なんかあっていない気がするんですよね。
⇒完成図がはっきりイメージできない。
いっその事、外部委託で丸ごと作成して貰っては?
じっくり打ち合わせも出来て良いかも知れませよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAでテキストボッ...
-
アクセスできない保護レベルエ...
-
VB.NETのテキストボックスで、...
-
VBのプログラム
-
VB2005テキストボックスへのコ...
-
VB添削
-
ユーザーフォームへのデータ入...
-
Excel ユーザーフォームで計算 ...
-
VBAで入力数値について
-
VBAのユーザーフォームで、テキ...
-
他のフォームから別のフォーム...
-
テキストボックスを下から上へ...
-
Excel VBAでsub,dimは何の略?
-
VB
-
【VBS】クリップボード操作につ...
-
String型の値にスラッシュをつ...
-
リストビューの列ヘッダーの幅...
-
VB.NET)コンボボックスの連動に...
-
VB.NETでのイベントの途中終了
-
[vb.net] 起動したFrom2を閉じ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAでテキストボッ...
-
アクセスできない保護レベルエ...
-
VBAで入力数値について
-
【VB.NET】テキストボックスに...
-
VBでの入力値制限について
-
テキストボックスに大文字を
-
visual basic初心者です。 visu...
-
Excel ユーザーフォームで計算 ...
-
ユーザーフォームへのデータ入...
-
コンボボックスからテキストボ...
-
VBAのフォーム カーソル移動
-
テキストボックスを空白にする方法
-
VB2010 TextBoxの数字の表示...
-
【C#】コンボボックスにおけるS...
-
VBでローマ字入力とかな入力を...
-
VB2005テキストボックスへのコ...
-
VBAのユーザーフォームで、テキ...
-
整数かどうかチェックする
-
VB.NETのテキストボックスで、...
-
Xcodeのテキストボックスの値に...
おすすめ情報