クラスからGameMainの関数にアクセスする方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
エルエン

クラスからGameMainの関数にアクセスする方法

#1

投稿記事 by エルエン » 6年前

DXライブラリで作ったGameMainクラスに別のクラスからアクセスしたいのですが、うまくいきません。
C#で子Formから親Formにアクセスする場合
親Form側

コード:

Form2 form2 =new Form2(this);
AddOwnedForm(form2);
子Form側

コード:

public Form2(Form1 fr)
        {
            form1 = fr;
            InitializeComponent();
        }
Form1 form1;
上記の形でアクセスできたのですが、DXライブラリだとAddOwnedFormが使えません。
もし可能であれば、GameMainクラスにある自作関数(メソッド)にアクセスする方法を教えていただけないでしょうか。

アバター
雨ガエル
記事: 34
登録日時: 7年前
住所: 新潟
連絡を取る:

Re: クラスからGameMainの関数にアクセスする方法

#2

投稿記事 by 雨ガエル » 6年前

C#のDXライブラリはよくわかりませんが、GameMainクラスのメンバ関数をほかのクラスから呼び出したいのなら

コード:

class GameMain
{
     public void Func()
     {
           //Sampleクラスから呼ばれる
     }
}

class Sample
{
     GameMain game;

     public Sample()
     {
           game = new GameMain();
           game.Func();
     }
}
のようにGameMainクラスのメンバ関数にpublic修飾子をつければアクセスできるようになります。

※期待外れの回答だったらすみません。

エルエン

Re: クラスからGameMainの関数にアクセスする方法

#3

投稿記事 by エルエン » 6年前

返信ありがとうございます。
実は同じような方法は試したのですが、クラス側でnewでインスタンスを作成するとウィンドウが立ち上がったまま、フリーズしたような状態になってしまうのです。
逆にnewを使わないと関数までは流れるのですが、関数を呼び出すコードで「オブジェクト参照がオブジェクト インスタンスに設定されていません。」というエラーが出てしまいまして、今はクラス側でnewを使わずにアクセスする方法はないものか色々と試している状態です。

アバター
へにっくす
記事: 628
登録日時: 7年前
住所: 東京都

Re: クラスからGameMainの関数にアクセスする方法

#4

投稿記事 by へにっくす » 6年前

エルエン さんが書きました:返信ありがとうございます。
実は同じような方法は試したのですが、クラス側でnewでインスタンスを作成するとウィンドウが立ち上がったまま、フリーズしたような状態になってしまうのです。
逆にnewを使わないと関数までは流れるのですが、関数を呼び出すコードで「オブジェクト参照がオブジェクト インスタンスに設定されていません。」というエラーが出てしまいまして、今はクラス側でnewを使わずにアクセスする方法はないものか色々と試している状態です。
その問題のコードをさらしてくれませんかね。
そうすればもっとピンポイントなアドバイスができると思うのですが。
written by へにっくす

ホヅミ
記事: 110
登録日時: 9年前

Re: クラスからGameMainの関数にアクセスする方法

#5

投稿記事 by ホヅミ » 6年前

DXライブラリだからというよりもC#側に問題があるような気がします
私は一応これでできました。

コード:

// 親フォーム
namespace CStest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            label1.Text = "DXC#ライブラリテスト";
            sub subform = new sub(this);
            subform.Show();
        }

    }
}

コード:

// 子フォーム
namespace CStest
{
    public partial class sub : Form
    {
        Form1 pf;
        public sub(Form1 pf)
        {
            InitializeComponent();
            this.pf = pf;

            label1.Text = pf.label1.Text;
        }
    }
}

アバター
雨ガエル
記事: 34
登録日時: 7年前
住所: 新潟
連絡を取る:

Re: クラスからGameMainの関数にアクセスする方法

#6

投稿記事 by 雨ガエル » 6年前

ホヅミさんのおっしゃった方法で子フォームから親フォームの関数を呼び出すことができます。

別の例を挙げます。

コード:

//親フォーム
class Form1 : Form
{
     public Form1()
     {
          InitializeComponent();

          Form2 f2 = new Form2();
          f2.Show(this);  //f2の親をForm1にする
     }
     public void Func()
     {
          this.Text = "Func関数が呼ばれました。";
     }
}

//子フォーム
class Form2 : Form
{
     public Form2()
     {
          InitializeComponent();

          //Form1 (親フォーム) の関数を呼び出します。
          ((Form1)this.Owner).Func();
     }
}
子フォームのShowメソッドに親フォーム自身(this)を渡し親子関係を設定し、親フォームの関数を呼び出したいときは
((親フォーム)this.Owner).呼びたい関数();
で呼び出すことができます。
Showメソッドにthisを渡さなくても、f2.Owner = this; のように設定してやることもできます。

こちらの方法は親と子の関係がある場合に限り使えますが、ただ他のフォームにアクセスしたいなら、
ホヅミさんが挙げた例のほうを使います。

エルエン

Re: クラスからGameMainの関数にアクセスする方法

#7

投稿記事 by エルエン » 6年前

重ね重ねありがとうございます。
今回はC#のFormではなくDXライブラリで作成したウィンドウを表示しているので、Form関係の関数が使えない状態でした。
子Formから親Formにアクセスするように、クラスからMainGameクラスにアクセスできないかと考えていたのですが、誤解を招く書き方をしてしまったかもしれません。
GameMainクラス

コード:

class GameMain
    {
        CharaMaking charaMaking = new CharaMaking(this);

        public void changeGame(int cg)
        {
            switch (cg)
            {
                case 1:
                    break;
                case 2:
                    break;
                case 3:
                    break;
            }
        }
     }
キャラメイキングクラス

コード:

class CharaMaking
    {
        GameMain gamemain;

        //コンストラクタ
        public CharaMaking(GameMain gm)
        {
            gamemain =gm;
        }

        public void creatPlayer()
        {
            gamemain.changeGame(3);
        }
それで今回質問させていただいた方法とは別の方法が頭に浮かびまして、こちらの方法が駄目ならそちらを使って、解決のチェックも一応入れさせていただきます。
今回返信していただいたお三方には、本当に感謝しております。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る