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

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

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

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

Q&A

解決済

4回答

6849閲覧

他フォームからのメインフォームのコントロールについて

takpika

総合スコア9

C#

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

0グッド

0クリップ

投稿2017/12/22 07:33

編集2017/12/22 10:41

C#のFormを使ってプログラミングをしています。
別フォームからメインフォームのRichTextBoxをコントロールしようとしているのですが、エラーはでないのですが上手く実行できません。
また、コンソールにRichTextBoxの内容を表示しようとしても何も表示されません。
コードは以下の通りです。

*追記
基本的にVisual Studio Codeで作成しているので、コンパイルは"C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe"をコマンドプロンプトで実行して行っています。

C#

1class Form1 : Form 2{ 3 public RichTextBox rtb; 4 private Button bt; 5 public static void Main() 6 { 7 Application.Run(new Form1()); 8 } 9 public Form1() 10 { 11 rtb = new RichTextBox(); 12 rtb.Multiline = true; 13 rtb.ScrollBars = RichTextBoxScrollBars.ForcedBoth; 14 rtb.WordWrap = false; 15 16 bt = new Button(); 17 bt.Parent = this; 18 bt.Text = "Open"; 19 bt.Click += new EventHandler(btClick); 20 } 21 public void btClick(Object sender, EventArgs e) 22 { 23 Form2 fm2 = new Form2(); 24 fm2.open(); 25 } 26} 27class Form2 : Form 28{ 29 public Form1 main = new Form1(); 30 private Button bt = new Button(); 31 public Form2() 32 { 33 this.FormBorderStyle = FormBorderStyle.FixedDialog; 34 this.MaximizeBox = false; 35 this.MinimizeBox = false; 36 } 37 public void open() 38 { 39 bt.Text = "Click(&C)"; 40 bt.Click += new EventHandler(btClick); 41 this.Show(); 42 } 43 public void btClick(Object sender, EventArgs e) 44 { 45 Console.WriteLine(main.rtb.Text); 46 main.rtb.Select(3,5); 47 main.rtb.SelectionBackColor = Color.Red; 48 } 49}

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

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

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

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

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

guest

回答4

0

Form1のクラスにpartialを追加したことで成功しました。

投稿2017/12/31 16:37

takpika

総合スコア9

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

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

0

ベストアンサー

まず Form1 のインスタンスが Form2 にわたっていません。
次に bt のインスタンスが作成されていません。
さらに MaximizeBox の綴りが違います。
あと rtb にテキストが入っていません。
そのうえ Form2 にボタンが表示されていません。
ほんとにコンパイル通りました?

とりあえず以下のソースで動きました。

C#

1partial class Form1 : Form 2{ 3 public RichTextBox rtb; 4 private Button bt; 5 public static void Main() 6 { 7 Application.Run(new Form1()); 8 } 9 public Form1() 10 { 11 rtb = new RichTextBox(); 12 rtb.Text = "Hello World!"; 13 rtb.Multiline = true; 14 rtb.ScrollBars = RichTextBoxScrollBars.ForcedBoth; 15 rtb.WordWrap = false; 16 17 bt = new Button(); 18 bt.Parent = this; 19 bt.Text = "Open"; 20 bt.Click += new EventHandler(btClick); 21 } 22 public void btClick(Object sender, EventArgs e) 23 { 24 Form2 fm2 = new Form2(this); 25 fm2.open(); 26 } 27} 28class Form2 : Form 29{ 30 public Form1 main; 31 private Button bt = new Button(); 32 public Form2(Form1 main) 33 { 34 this.main = main; 35 this.FormBorderStyle = FormBorderStyle.FixedDialog; 36 this.MaximizeBox = false; 37 this.MinimizeBox = false; 38 } 39 public void open() 40 { 41 bt.Text = "Click(&C)"; 42 bt.Click += new EventHandler(btClick); 43 this.Controls.Add(bt); 44 this.Show(); 45 } 46 public void btClick(Object sender, EventArgs e) 47 { 48 Console.WriteLine(main.rtb.Text); 49 main.rtb.Select(3, 5); 50 main.rtb.SelectionBackColor = Color.Red; 51 } 52}

投稿2017/12/22 08:59

Zuishin

総合スコア28656

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

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

Zuishin

2017/12/22 11:08 編集

あとつまずくとしたら「コンソールに何も表示されない」ということでしょう。 ビルドオプションでコンソールアプリケーションを指定してください。
takpika

2017/12/22 10:41

ご指摘いろいろとありがとうございます。 記事を修正させていただきました。
Zuishin

2017/12/22 10:43

まだだめですね。 私がちゃんと動くソースを挙げていますが試してみましたか?
guest

0

アプリケーションが開始され
AというForm1のインスタンスが生成されて表示されます。
ここでボタンを押し、Form2のインスタンスが生成されます。

このForm2の中でBというForm1のインスタンスが生成されます。
public Form1 main = new Form1();がこれにあたります。
Form2の中ではBというインスタンスを見ているので
Aというインスタンスとは全くの別の物となっています。

Form2のほうから操作したいというのであれば、Aというインスタンスを
何らかの方法でForm2へ教えてやらないといけません。

投稿2017/12/22 08:02

YAmaGNZ

総合スコア10222

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

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

0

Form2クラス内

public Form1 main = new Form1();

これだと、mainは呼び出し元のForm1とは別物になってます。
Form.Ownerプロパティ使ってみてください。

//Form1クラス public void btClick(Object sender, EventArgs e) { Form2 fm2 = new Form2(); fm2.Owner = this; fm2.Open(); } //Form2クラス public Form1 main; public void open() { bt.Text = "Click(&C)"; bt.Click += new EventHandler(btClick); this.Show(); main = (Form1)this.Owner; }

投稿2017/12/22 08:00

編集2017/12/22 08:07
lain

総合スコア161

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

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

takpika

2017/12/22 08:21

すみません。試してみたのですが、変わりませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問