ページ 1 / 1
クラスからGameMainの関数にアクセスする方法
Posted: 2013年4月19日(金) 20:36
by エルエン
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クラスにある自作関数(メソッド)にアクセスする方法を教えていただけないでしょうか。
Re: クラスからGameMainの関数にアクセスする方法
Posted: 2013年4月20日(土) 00:08
by 雨ガエル
C#のDXライブラリはよくわかりませんが、GameMainクラスのメンバ関数をほかのクラスから呼び出したいのなら
コード:
class GameMain
{
public void Func()
{
//Sampleクラスから呼ばれる
}
}
class Sample
{
GameMain game;
public Sample()
{
game = new GameMain();
game.Func();
}
}
のようにGameMainクラスのメンバ関数にpublic修飾子をつければアクセスできるようになります。
※期待外れの回答だったらすみません。
Re: クラスからGameMainの関数にアクセスする方法
Posted: 2013年4月20日(土) 08:22
by エルエン
返信ありがとうございます。
実は同じような方法は試したのですが、クラス側でnewでインスタンスを作成するとウィンドウが立ち上がったまま、フリーズしたような状態になってしまうのです。
逆にnewを使わないと関数までは流れるのですが、関数を呼び出すコードで「オブジェクト参照がオブジェクト インスタンスに設定されていません。」というエラーが出てしまいまして、今はクラス側でnewを使わずにアクセスする方法はないものか色々と試している状態です。
Re: クラスからGameMainの関数にアクセスする方法
Posted: 2013年4月20日(土) 10:00
by へにっくす
エルエン さんが書きました:返信ありがとうございます。
実は同じような方法は試したのですが、クラス側でnewでインスタンスを作成するとウィンドウが立ち上がったまま、フリーズしたような状態になってしまうのです。
逆にnewを使わないと関数までは流れるのですが、関数を呼び出すコードで「オブジェクト参照がオブジェクト インスタンスに設定されていません。」というエラーが出てしまいまして、今はクラス側でnewを使わずにアクセスする方法はないものか色々と試している状態です。
その問題のコードをさらしてくれませんかね。
そうすればもっとピンポイントなアドバイスができると思うのですが。
Re: クラスからGameMainの関数にアクセスする方法
Posted: 2013年4月20日(土) 10:24
by ホヅミ
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;
}
}
}
Re: クラスからGameMainの関数にアクセスする方法
Posted: 2013年4月20日(土) 16:12
by 雨ガエル
ホヅミさんのおっしゃった方法で子フォームから親フォームの関数を呼び出すことができます。
別の例を挙げます。
コード:
//親フォーム
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の関数にアクセスする方法
Posted: 2013年4月20日(土) 20:37
by エルエン
重ね重ねありがとうございます。
今回は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);
}
それで今回質問させていただいた方法とは別の方法が頭に浮かびまして、こちらの方法が駄目ならそちらを使って、解決のチェックも一応入れさせていただきます。
今回返信していただいたお三方には、本当に感謝しております。
ありがとうございました。