C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: VBのGUI


(過去ログ 113 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■66966 / inTopicNo.1)  VBのGUI
  
□投稿者/ はなまる (1回)-(2013/06/13(Thu) 00:31:31)

分類:[VB.NET/VB2005 以降] 

VBのGUIです。

行列の足し算を行うプログラムをつくりたいです。
以下のプログラムはできたところまで作成しています。

□個の□行□列(□はテキストボックス)の所に例えばユーザーが3 3 3と入力したとします。
ボタン1を押すと3×3の3個個分のテキストボックスがでてきて、要素を打ち込めるようになります。
そしてユーザが要素を打ち込みます。次に要素が
1 2 1   2 1 2 2 1 2
2 1 2 1 2 1 1 2 1
1 2 1 2 1 2 1 2 1
というように入力されたとします。
ボタン2を押すと
3×3のテキストボックスが出てきて
この3つの行列の和を足した
5 4 5
4 5 4
4 5 4というようにテキストボックスに表示されるようにしたいです。

3この3行3列の和だけでなく何個の何行何列の場合でもできるようにしたいです。
どのようなソースでこのプログラムはできるのでしょうか。




Public Class Form1


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Bounds = New Rectangle(10, 10, 1300, 800)
Dim number As Integer
Dim rows As Integer
Dim columns As Integer
If Not Integer.TryParse(TextBox3.Text, number) Then
MessageBox.Show("数字で入力してください", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End If


If Not Integer.TryParse(TextBox1.Text, rows) Then
MessageBox.Show("数字で入力してください", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End If

If Not Integer.TryParse(TextBox2.Text, columns) Then
MessageBox.Show("数字で入力してください", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End If

For k = 1 To number
For i = 1 To rows
For j = 1 To columns
Dim tb As TextBox = New TextBox()
tb.Name = "R" & i.ToString() & "C" & j.ToString() & "No" & k.ToString()

Me.Controls.Add(tb)
tb.Top = (i - 1) * 30 + 80
tb.Left = (j - 1) * 60 + 70 * (columns * (k - 1)) + 10
tb.Width = 50
Next
Next
Next


End Sub



Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim number As Integer
Dim rows As Integer
Dim columns As Integer
Dim r As Integer
Dim n As Integer
Dim m As Integer
Dim sum As Double
sum = 0

For n = 1 To columns
For m = 1 To rows
sum = 0
For r = 1 To number

Next
For i As Integer = 1 To rows
For j As Integer = 1 To columns


Dim tb As TextBox = New TextBox()
tb.Name = "R" & i.ToString() & "C" & j.ToString()
Me.Controls.Add(tb)
tb.Top = (i - 1) * 30 + 80
tb.Left = (j - 1) * 60 + 10
tb.Width = 40
Next
Next
Next
Next
End Sub



End Class


引用返信 編集キー/
■66979 / inTopicNo.2)  Re[1]: VBのGUI
□投稿者/ kiku (8回)-(2013/06/13(Thu) 17:16:35)
指摘事項が多いため、
何から指摘して良いかわからなかったため、
困っているであろう問題点を想像し、
回答してみます。

想像した問題点
1.ボタン1で動的にTextBoxを生成しているため、
  ボタン2でTextBoxに入力された情報を取得できない。
2.ボタン1とボタン2内で、共通として利用できる変数を定義
  する方法がわからない。

ご希望の処理結果ではありませんが、
ご参照いただければと存じます。

Public Class Form1

    Private number As Integer
    Private rows As Integer
    Private columns As Integer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.Bounds = New Rectangle(10, 10, 1300, 800)
        If Not Integer.TryParse(TextBox3.Text, number) Then
            MessageBox.Show("数字で入力してください", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End If


        If Not Integer.TryParse(TextBox1.Text, rows) Then
            MessageBox.Show("数字で入力してください", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End If

        If Not Integer.TryParse(TextBox2.Text, columns) Then
            MessageBox.Show("数字で入力してください", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End If

        For k = 1 To number
            For i = 1 To rows
                For j = 1 To columns
                    Dim tb As TextBox = New TextBox()
                    tb.Name = "R" & i.ToString() & "C" & j.ToString() & "No" & k.ToString()

                    Me.Controls.Add(tb)
                    tb.Top = (i - 1) * 30 + 80
                    tb.Left = (j - 1) * 60 + 70 * (columns * (k - 1)) + 10
                    tb.Width = 50
                Next
            Next
        Next
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim k, i, j As Integer

        '結果を表示するTextBox群を作成
        k = 0
        For i = 1 To rows
            For j = 1 To columns
                Dim tb As TextBox = New TextBox()
                tb.Name = "R" & i.ToString() & "C" & j.ToString() & "No" & k.ToString()

                Me.Controls.Add(tb)
                tb.Top = (i - 1) * 30 + 200
                tb.Left = (j - 1) * 60 + 10
                tb.Width = 50
            Next
        Next

        'R1C1No1(入力)をさがす。子コントロールも検索する。
        Dim cs1 As Control() = Me.Controls.Find("R1C1No1", True)
        If cs1.Length <= 0 Then
            MessageBox.Show("見つからなかった", "", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End If

        'R1C1No0(結果)をさがす。子コントロールも検索する。
        Dim cs0 As Control() = Me.Controls.Find("R1C1No0", True)
        If cs0.Length <= 0 Then
            MessageBox.Show("見つからなかった", "", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End If

        '入力した内容を結果に反映
        CType(cs0(0), TextBox).Text = CType(cs1(0), TextBox).Text

    End Sub

End Class

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -