質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
textbox

HTMLの<input type="text">で生成されるtextboxに関するタグです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

3344閲覧

VB.netで別フォームにテキストを移す方法について

yukenai

総合スコア16

textbox

HTMLの<input type="text">で生成されるtextboxに関するタグです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

2クリップ

投稿2018/01/01 07:22

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2018/01/01 07:31

失敗する方の全ソースを挙げてみてください。
yukenai

2018/01/02 14:49

その他もろもろあって、800行ぐらいありますが、それもでよければ、アップします。また、一部記入し忘れましたが、Form2のTextBoxに張り付けたいTextはForm1でSerialPort1より、受信した情報をForm2に転送したいと思っています。そのとき、Form2は開いていません。この辺を踏まえてアドバイス頂ければとおもいます。必要であれば、リストをアップします。
Zuishin

2018/01/02 14:53 編集

開いていないというのはどういう意味ですか?インスタンスはあるんですよね?800行すべてではなく問題が再現する状態を保ちながら関係ない部分を削ってコンパイル可能な最小のソースを作ってください。もとのソースはバックアップしておいてください。
yukenai

2018/01/03 04:16

開いていない状態とは、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
Zuishin

2018/01/03 04:18

立ち上がっていないというのもどういう意味かわかりませんが、ここに書くと見づらいので質問を編集してください。その際にはインデントが消えたりしないようコードブロックを使ってください。
yukenai

2018/01/03 04:18

アップ時、改行のやり方がわからず、ソースが羅列状態となってしました。申し訳ありません、解析可能でしょうか?
Zuishin

2018/01/03 04:20

質問が編集できます。私も他の回答者もとても読む気にならないと思うのでコードブロックを使ってインデントを付けて質問を書き直してください。ここのコメントを読んでいない人にも質問だけ読めばわかるように書くと回答がつきやすいと思います。
yukenai

2018/01/03 05:06

了解しました。もう少し検討してみます。ありがとうございます。
guest

回答1

0

ベストアンサー

こんにちは。

CType(Form2.Controls("TextBox2"), TextBox)

これでテキストボックスが取得できるということは、おそらくですがVB.NETの「フォームの既定インスタンス」の仕組みで暗黙的にForm2のインスタンスを取得しているのだと思います。

Formのインスタンスを意識してください。(Newのとこ)

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim frm2 = New Form2 frm2.TextBox2.Text = Me.TextBox1.Text frm2.Show() End Sub

投稿2018/01/10 16:17

Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukenai

2018/01/13 00:42

回答ありがとうございます。また、返信が遅れてすいません。 早速、やってみましたが、うまく表示できませんでした。  追記ですが、実際に行いたいのは、Form1でForm2に表示したいデータをserialportより受信し、そのデータを変数で保存しておき、Form2が開いた時にその受信データをForm2の所定のTextBoxに表示させるようにしたいとおもっています。なお、Form2が開いているときには、Form1が変更できないように f.ShowDialog(Me)でForm2を開いています。 以上、ご検討よろしく御願いします。
Tak1wa

2018/01/13 00:55

どうやってみたのか、どううまくいかないのか、追記でやってみたいことがあるうえでどのように取り組んだのかまず記載して頂けますか。 そのあたりが抜けていると回答者からは丸投げの質問者だと思われかねないので気を付けたほうが宜しいかと思います。
yukenai

2018/01/13 05:43

すいません。具体的にトライしたのは、以下を作成し、Form1に文字データを入力しておき、Form2を Button1を押して、開いています。そのときにForm2のTextBox2には、何も表示されていませんでした。 ちなみに frm2.ShowDialog(Me) と  'frm2.Show() の両方をトライしてNGでした。 以上、よろしく御願いします。 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim frm2 = New Form2 frm2.TextBox2.Text = TextBox1.Text frm2.ShowDialog(Me) 'frm2.Show() End Sub
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問