VB.netを使用して、Form1から、Form2のTextBoxにテキストを入れる方法を教えて下さい。
なお、ネットで調べて、テスト的に以下を入力してやってみると、Form2に予定通り表示されますが、
別なプロジェクトに同様に入力して、行ってみると表示できません。
どこが違っているか不明です。
違っていそうなところを教えて下さい。または全く別な方法でも構わないので確実に表示できる方法を
教えてください。
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim f2_TextBox2 As TextBox = CType(Form2.Controls("TextBox2"), TextBox)
f2_TextBox2.Text = Me.TextBox1.Text
End Sub
失敗する方の全ソースを挙げてみてください。
その他もろもろあって、800行ぐらいありますが、それもでよければ、アップします。また、一部記入し忘れましたが、Form2のTextBoxに張り付けたいTextはForm1でSerialPort1より、受信した情報をForm2に転送したいと思っています。そのとき、Form2は開いていません。この辺を踏まえてアドバイス頂ければとおもいます。必要であれば、リストをアップします。
開いていないというのはどういう意味ですか?インスタンスはあるんですよね?800行すべてではなく問題が再現する状態を保ちながら関係ない部分を削ってコンパイル可能な最小のソースを作ってください。もとのソースはバックアップしておいてください。
開いていない状態とは、Form1が立ち上がって、Sirialport1より通信情報が入ってきても、Form2はボタンを押さないと立ち上がっていない状態を言っています。ソースを削減しましたのでForm1とDorm2のソースをアップします。Form2のボタン3でForm1にデータをいれられますが、Form1のボタ4でエラーがでます。また、Form1のCtype(97行目)でもForm2にデータを転送できません。以上よろしくお願いします。{Form1}Imports System.IO.Ports Public Class Form1 Public Shared Sub Main() Application.EnableVisualStyles() 'TooBarの画像が表示されない場合は次の行を加える Application.DoEvents() Application.Run(New Form1) End Sub Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint '四角を描く1 Dim g4 As Graphics = Me.CreateGraphics g4.FillRectangle(Brushes.Beige, 25, 70, 120, 570) End Sub Delegate Sub SetTextCallback(ByVal [text] As String) Private Sub UpdateCOMPortList() Dim s As String Dim i As Integer Dim foundDifference As Boolean i = 0 foundDifference = False If lstCOMPorts.Items.Count = SerialPort.GetPortNames().Length Then For Each s In SerialPort.GetPortNames() If lstCOMPorts.Items(i).Equals(s) = False Then foundDifference = True End If i = i + 1 Next s Else foundDifference = True End If If foundDifference = False Then Exit Sub End If lstCOMPorts.Items.Clear() For Each s In SerialPort.GetPortNames() lstCOMPorts.Items.Add(s) Next s lstCOMPorts.SelectedIndex = 0 End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick UpdateCOMPortList() TextBox3.Text = "38400bps" End Sub Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click Try SerialPort1.PortName = lstCOMPorts.Items(lstCOMPorts.SelectedIndex).ToString() SerialPort1.Open() btnConnect.Enabled = False lstCOMPorts.Enabled = False btnClose.Enabled = True txtDataReceived.Clear() TextBox2.Text = "接続中" 'vbCrLf <===改行 TextBox2.BackColor = Color.Blue Catch ex As Exception btnClose_Click(Me, e) End Try End Sub Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click btnClose.Enabled = False btnConnect.Enabled = True lstCOMPorts.Enabled = True Try SerialPort1.DiscardInBuffer() SerialPort1.DiscardOutBuffer() 'Close the COM port SerialPort1.Close() TextBox2.Text = "未接続" TextBox2.BackColor = Color.Red Catch ex As Exception End Try End Sub '****** 受信 *************************************************** Private RecvBuffer As String = "" Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived 'シリアルポートをオープンしていない場合、処理を行わない. If SerialPort1.IsOpen = False Then Return End If Try RecvBuffer &= SerialPort1.ReadExisting() If RecvBuffer.Contains(vbCrLf) Then Dim Command As String Command = RecvBuffer If Command.Contains("T") Then If Command.Contains("T1") Then Dim f2_TextBox1 As TextBox = CType(Form2.Controls("TextBox1"), TextBox) f2_TextBox1.Text = "abcd" TextBox1.Text = Command.Replace("T1", "") End If End If RecvBuffer = "" '>>>>> "" => 文字変数をクリアする End If Catch ex As Exception btnClose_Click(Me, e) End Try End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Dim f As New Form2() f.ShowDialog(Me) f.Dispose() End Sub Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click Dim f As Form2 f.Label1.BackColor = Color.Red f.Label1.Text = "aswe123" End Sub End Class {Form2}Public Class Form2 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click '自分自身のフォームを閉じる Me.Close() End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click DirectCast(Me.Owner, Form1).Label1.BackColor = Color.Red DirectCast(Me.Owner, Form1).Label1.Text = "aswe123" 'Dim f As Form1 'f = Me.Owner 'f.Label1.BackColor = Color.Red End Sub End Class
立ち上がっていないというのもどういう意味かわかりませんが、ここに書くと見づらいので質問を編集してください。その際にはインデントが消えたりしないようコードブロックを使ってください。
アップ時、改行のやり方がわからず、ソースが羅列状態となってしました。申し訳ありません、解析可能でしょうか?
質問が編集できます。私も他の回答者もとても読む気にならないと思うのでコードブロックを使ってインデントを付けて質問を書き直してください。ここのコメントを読んでいない人にも質問だけ読めばわかるように書くと回答がつきやすいと思います。
了解しました。もう少し検討してみます。ありがとうございます。
回答1件
あなたの回答
tips
プレビュー