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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

1回答

14413閲覧

別フォームのメソッドを実行したい

Mogami_Tsuchika

総合スコア47

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2016/07/03 12:32

Form1とForm2があります。
Form1にはボタンがあり、Form2にはテキストボックスがあります。

Form1のボタンを押したら、Form2内のメソッドを実行させたく

C#

1 2//************Form2*****************// 3public Make() 4{ 5 TextBox1.Text = "Hello"; 6} 7 8//************Form1*****************// 9private void button1_Click(object sender, EventArgs e) 10{ 11 Form2.Make(); 12}

と書いたのですが、
エラー CS0120 静的でないフィールド、メソッド、またはプロパティ 'Form2.Make()' で、オブジェクト参照が必要です
となってしまいます。
どうすれば、いいでしょうか?
教えてください。

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

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

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

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

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

guest

回答1

0

エラー内容からいってForm2はクラス(型枠)名ですよね?
staticに定義したものでないのならインスタンス(実体)がないと呼び出しできません
そのメソッドで行うのがインスタンス個別の内容であるのなら処理を行いたいインスタンスを指定して呼び出しましょう
インスタンスに関係なくForm2クラスそのもの(もしくはすべてに対して共通のもの)が対象となる処理であるのならstaticで定義しましょう

で、このForm2.Make()の中のTextBox1.TextってのはForm2のインスタンスがないと無理っぽいものだと思いますのでForm1の今表示されているインスタンスの中からどこかに表示してる(?)Form2のインスタンスを指定できるようにインスタンスを生成した段階でどこかの変数に格納したうえでForm1の中からアクセスできるようにしておかなければなりません
そのやり方に関してはForm2がどこでどのタイミングで作られているのか分かりませんので具体的にどうすればいいのかは書けませんが・・・

例えばForm1にボタンを一つ追加してその中でnew Form2()をして変数に格納して、その変数を.Show()するってのを二つくらい書けばクラス定義とインスタンスの違いが何となく分かるかなぁと思ってみたり

投稿2016/07/03 13:02

len_souko

総合スコア1337

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問