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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

解決済

1回答

1033閲覧

C# Windows Formで異なるClassからForm classのText Boxに書き込む方法

ParaParaDance

総合スコア56

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

0グッド

0クリップ

投稿2022/02/18 14:28

C# Windows FormのプロジェクトをVisual Studioで作ると namespaceとpublic partial class Form1:Formのクラスが宣言され、Form1クラスのコンストラクタが現れます。

Form1クラスないでのTextboxに文字を代入するのであれば、単純 tHoge.Text = "dog";にすればOKです。

知りたいのは、Form1と異なるnamespaceとクラスを作り、その新しいクラスからForm1のクラスにあるテキストボックスに直接文字を代入したく、using Form1のnameにしてから、tHoge.Text = "dog"にしてもダメでした。

異なるnamespaceのクラスからFormのtextboxに文字を入れるにはどうすればよいでしょうか。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/02/20 01:26

質問者さん、無言ですが、回答したのでそれに対するフィードバックを書きましょう。役に立った / 立たなかったぐらいのフィードバックはすぐにでも返せるのでは? 役に立たなかったならどこがダメだったかを書くとより期待するものに近い回答が出てくるかも。とにかく無言は NG です。
fana

2022/02/21 01:51

> 異なるnamespace という要素が話にどう関わってくるのかが不明です. 「同じnamespace」だったら問題ないのですか?
ParaParaDance

2022/02/21 04:20

同じnamespaceで試しても駄目でした。
退会済みユーザー

退会済みユーザー

2022/02/21 04:46

回答欄のコメントで Form1 のインスタンスの参照はどこから取得できるか書きましたけど、それには無反応。それが分かれば解決するはずなのだけど・・・
fana

2022/02/21 05:51

えっと, > 異なるnamespaceのクラスからFormのtextboxに文字を入れるにはどうすればよいでしょうか っていう書き方では読み手としてはどう見ても「namespace が異なること」が可否に関わっていると見えるわけで, そういう話でないなら「namespaceがどうの」言うこと自体の意味が不明ですよね,っていう. もうちょっと情報の要不要を考えて話を整理されてはどうでしょうか. あと,話(のレベル)的に 「ダメでした」っていうのを実際やってるコード(と同等のコード)を提示した方が良さそうに思えます: Form1のインスタンスのありかが不明な状況下で,「新しいクラス」というのをどこでどうやってインスタンス作って,件の処理というのはどうやって実施するようなコードを書いているのか…?
退会済みユーザー

退会済みユーザー

2022/02/22 09:12

質問者さん、その後無言ですが、解決したそうなのでベストアンサーを付けてこのスレッドはクローズしてください。
guest

回答1

0

ベストアンサー

アクセス修飾子 (private とか public とか) は分かりますか? 答えが No なら、まずググって調べるなどして勉強してください。

Visual Studio のツールボックスから TextBox を Form1 にドラッグ&ドロップすると、その TextBox のアクセス修飾子は private になります。Form1.Designer.cs を見てください。

他のクラスからそれにアクセスしたいなら、お勧めはそれにアクセスするための public プロパティを Form1.cs に定義することです。

投稿2022/02/18 22:22

編集2022/02/18 22:27
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ParaParaDance

2022/02/21 02:28

アドバイス有難うございます。 private、publicなどの概念は理解しています。 しかし、TextBoxの属性をpublicにしても異なるclassからForm1のTextboxにアクセスすることはできませんでした。試しにnamespaceをForm1と同じにしてみましたが、それでも駄目でした。 そもそも、Form1クラスのインスタンスはどこに宣言されているのでしょうか。Form1は実行すると勝手に動作する訳なので、どこかでインスタンス化されていると思いますが、windows formの構造を理解した上で考えるべきかなとも思います。
退会済みユーザー

退会済みユーザー

2022/02/21 02:40

> Form1クラスのインスタンスはどこに宣言されているのでしょうか。 Program.cs を見てください。以下のようにインスタンスが作られているはずです。 static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); }
ParaParaDance

2022/02/21 08:43 編集

Application.Run(new Form1());は、Windows Systemに必要なおまじないのようですが、これがインスタンスを生成する動きをするものだとしたら、他のクラスでForm1のインスタンスを生成することは、どういう意味になりますか。 例えば、他のクラスでForm1のメンバを弄りたく、Form1 form1を持つクラスを作り、そのクラスのコンストラクタで this.Form1 = form1;のようにform1のインスタンスを別のクラス内で生成したら、重複になりませんか?
退会済みユーザー

退会済みユーザー

2022/02/21 09:16

たぶん Form1 のコードで「異なるnamespaceのクラス」のインスタンスを生成するのであろうと想像してますが、そうであれば「異なるnamespaceのクラス」に Form1 を引数に取るコンストラクタを作って、「異なるnamespaceのクラス」を初期化する際そのコンストラクタの引数に this を渡せばいいと思いますけど?
ParaParaDance

2022/02/22 00:58

「「異なるnamespaceのクラス」に Form1 を引数に取るコンストラクタを作って、「異なるnamespaceのクラス」を初期化する際そのコンストラクタの引数に this を渡せば」で解決しました。 質問ですが、異なるクラスのコンストラクタでForm1のクラスを宣言しますが、これは元々存在するForm1のインスタンスを参照することになるのでしょうか。 そうじゃなければ、Form1のインスタンスがWindows側で宣言されているのに、別の所でForm1のインスタンスを改めて作ることになり、両インスタンスが異なるものになるので理屈にあわなくなると思いますが、この理解で正しいでしょうか。
退会済みユーザー

退会済みユーザー

2022/02/22 01:07

> 異なるクラスのコンストラクタでForm1のクラスを宣言しますが、これは元々存在するForm1のインスタンスを参照することになるのでしょうか。 上の 2022/02/21 18:16 の私のコメントの通りにやったのであればそうです。Application.Run(new Form1()); の new Form1() で作られたインスタンスへの参照をコンストラクタの引数経由で渡すことになります。 C# の文法の基本を勉強することをお勧めします。上の質問は値型と参照型の違いが理解できていれば聞かなくても分かるはず。
退会済みユーザー

退会済みユーザー

2022/02/22 01:14

一つの課題が解決すると次の疑問が出てきて、次から次へと質問を繰り返すのは好ましくないです。なぜなら、ここは Q&A を通じての情報の蓄積を目的としていますので、後から検索などでここを訪れた人にとってはそのような質問の仕方をされると表題とは違った話になって言って訳が分からなくなるからです。 表題の問題が解決したら解決に役に立った回答にベストアンサーを付けてクローズしてください。表題とは別の質問がでてきたら新たに別のスレッドを立てて質問してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問