VB.NET 特有の「既定のインスタンス」に惑わされているのかもしれません。
■No73046 (yama さん) に返信
> Public Sub テキスト変更_ Form1()
> Form1.TextBox1.txt = "こんにちは"
> End Sub
ここで言う Form1 はすでに存在している Form1 と同じものを指すものとして扱ってくれます。
> AForm2・・Form1から
> Dim f As New メインメニュー()
> f.ShowDialog(Me)
> で開かれます。
> Public Sub テキスト変更 Form2()
> Form2.TextBox1.txt = "こんにちは"
> End Sub
しかし、ここで言う f と Form2 は外観が同じだけではまったく別のインスタンスになっています。
そのため、表示されていない Form2 に対してあなたは操作してしまっているわけです。
解決方法としては、f をクラスに渡すことです。(「コントロール」という名前の自作クラスなのでしょうか…?)
引数でも何でもよいので f を渡してあげて、「同じインスタンスに対する操作」として実現してください。
イメージ
Public Sub テキスト変更 Form2(ByVal f As Form2)
f.TextBox1.txt = "こんにちは"
End Sub
con.テキスト変更_ Form2(f)
※注意※
ここの f は ShowDialog を呼び出したものと同じインスタンスである必要があります。
新しく New したり、Form2 の既定のインスタンスを使わないようにしてください。
あとは余計なお世話になってしまうかもしれません。
プログラミングで一般的な用語を自作クラスに命名しない方がよいと思います。
今回の「コントロール」は他の人にその名前を伝えると、自作クラスではなく、「Windows プログラミング一般におけるコントロール」と誤解します。
コミュニケーションのロスにつながる恐れがあります。