このプログラムは
例えば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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスできない保護レベルエ...
-
エクセルVBAでテキストボッ...
-
VBAで入力数値について
-
ユーザーフォームへのデータ入...
-
テキストボックスに大文字を
-
TextBoxの内容を右寄せ
-
visual basic初心者です。 visu...
-
コンボボックスからテキストボ...
-
テキストボックスにカーソルを...
-
整数かどうかチェックする
-
VB2010 TextBoxの数字の表示...
-
VBA public変数はどのようなこ...
-
VBAでcallで呼び出したsubを終...
-
定数を構造体で・・・
-
VB6でForm_Load中にイベントを...
-
String型の値にスラッシュをつ...
-
他のフォームから別のフォーム...
-
C言語のサフィックスについて
-
Excel VBAでsub,dimは何の略?
-
ボールが壁に当たって跳ね返る...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAでテキストボッ...
-
アクセスできない保護レベルエ...
-
VBAで入力数値について
-
【VB.NET】テキストボックスに...
-
Excel ユーザーフォームで計算 ...
-
テキストボックスを空白にする方法
-
TextBoxの内容を右寄せ
-
ユーザーフォームへのデータ入...
-
VBでの入力値制限について
-
VBでローマ字入力とかな入力を...
-
テキストボックスに大文字を
-
フォーカスを取得すると、自動...
-
TEXTBOXの表示形式の変...
-
コンボボックスからテキストボ...
-
ACCESS 除算での小数点切上げ方法
-
visual studio 2008 C# で、値...
-
【C#】コンボボックスにおけるS...
-
整数かどうかチェックする
-
visual basic初心者です。 visu...
-
VBSのプログラム
おすすめ情報