- PR -

[C#.net質問]form1のメソッドを別のクラスから呼び出す。

1
投稿者投稿内容
otf
ベテラン
会議室デビュー日: 2006/08/04
投稿数: 91
投稿日時: 2006-08-04 22:53
最近になってVisualStudioでC#をはじめたばかりです。

自分で作成したクラス「Class1」から最初に作成された「form1」のメソッドを呼び出すにはどうしたらいいのでしょうか。
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-08-04 23:04
  連載  改訂版 C#入門
otf
ベテラン
会議室デビュー日: 2006/08/04
投稿数: 91
投稿日時: 2006-08-04 23:08
一応一通り読んだつもりのですが・・・
イベント機能をつけばいいんでしょうか?
もし間違っていたら詳しい範囲を教えていただけないでしょうかm( _ _)m
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2006-08-04 23:23
呼び出したいメソッドは自分でForm1に定義したメソッドでしょうか?
メソッドを他のクラスから呼び出す場合、そのメソッドの可視性はpublic、またはinternalである必要があります。
また、呼び出し元(この場合Class1)が、Form1のインスタンスを参照できる必要があります。
”最初に作成されたform1”と言ってる辺り、恐らくotfさんがやりたいことは以下のようなことではないでしょうか?

コード:
public class Form1 : Form
{
  private Class1 class1;

  // コンストラクタ
  public Form1()
  {
    InitializeComponent();
    this.class1 = new Class1(this);
    // Class1のメソッドからこのForm1のメソッドを呼び出す
    this.class1.CallForm1Method();
  }

  // Class1から呼び出したいメソッド
  public void Method1()
  {
    // 処理
  }
}

public class Class1
{
  // Form1のインスタンス
  private Form1 form1;

  // コンストラクタ
  public Class1(Form1 form1)
  {
    this.form1 = form1
  }

  // form1のメソッドを呼び出すメソッド
  public void CallForm1Method()
  {
    this.form1.Method1();
  }
}



わからない単語だらけだと思います。検索するなりして調べてみてください。

(ただ、一般的にFormを他のクラスから操作することはあまり好ましくありませんが…。
上に書いたコードはあくまでも”otfさんがやりたいことを実現するにはこういうコードになるよ”ということです。)
otf
ベテラン
会議室デビュー日: 2006/08/04
投稿数: 91
投稿日時: 2006-08-04 23:48
けんじさんの方法でform1のインスタンスの参照をClass1のコンストラクタに渡したらうまくいきました!
ずっと悩んでたので解決してすっきりしました。
ありがとうございます!
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-08-05 09:06
引用:

けんじさんの書き込み (2006-08-04 23:23) より:

ただ、一般的にFormを他のクラスから操作することはあまり好ましくありませんが…。


どのあたりが、好ましくないと仰るのでしょうか?

Form1.Method1 メソッドは、Form1 のメンバに直接働きかけず、
Form1 に自発的に何かをさせようとするために用意されたメソッドですよね。

これすら好ましくないのであれば、Form に追加されるメンバは、
すべて、非公開にしないと好ましくないということになりますね。
たとえば、Form 間の連携はどうするのが好ましいと仰るのでしょうか?

# "他のクラス" が、ビジネス ロジックだけのクラスということであれば、
# 必要なパラメータをまとめたデータクラスなどが '望ましい' と言えるでしょうけど。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2006-08-05 14:21
引用:

じゃんぬねっとさんの書き込み(2006-08-05 09:06)より:

どのあたりが、好ましくないと仰るのでしょうか?

Form1.Method1 メソッドは、Form1 のメンバに直接働きかけず、
Form1 に自発的に何かをさせようとするために用意されたメソッドですよね。

これすら好ましくないのであれば、Form に追加されるメンバは、
すべて、非公開にしないと好ましくないということになりますね。
たとえば、Form 間の連携はどうするのが好ましいと仰るのでしょうか?



otfさんのやろうとしていることが、ビジネスロジッククラスからFormの操作を行いたい(FormがClass1の処理結果を戻り値として受け取れば良い所を、Class1からForm1を操作することによってFormに設定するような。)ということなのだと勝手に思い込んでいました。
言葉足らずな言い方になってしまい、申し訳なかったです。
1

スキルアップ/キャリアアップ(JOB@IT)