DXライブラリで作ったGameMainクラスに別のクラスからアクセスしたいのですが、うまくいきません。
C#で子Formから親Formにアクセスする場合
親Form側
子Form側
上記の形でアクセスできたのですが、DXライブラリだとAddOwnedFormが使えません。
もし可能であれば、GameMainクラスにある自作関数(メソッド)にアクセスする方法を教えていただけないでしょうか。
クラスからGameMainの関数にアクセスする方法
Re: クラスからGameMainの関数にアクセスする方法
返信ありがとうございます。
実は同じような方法は試したのですが、クラス側でnewでインスタンスを作成するとウィンドウが立ち上がったまま、フリーズしたような状態になってしまうのです。
逆にnewを使わないと関数までは流れるのですが、関数を呼び出すコードで「オブジェクト参照がオブジェクト インスタンスに設定されていません。」というエラーが出てしまいまして、今はクラス側でnewを使わずにアクセスする方法はないものか色々と試している状態です。
実は同じような方法は試したのですが、クラス側でnewでインスタンスを作成するとウィンドウが立ち上がったまま、フリーズしたような状態になってしまうのです。
逆にnewを使わないと関数までは流れるのですが、関数を呼び出すコードで「オブジェクト参照がオブジェクト インスタンスに設定されていません。」というエラーが出てしまいまして、今はクラス側でnewを使わずにアクセスする方法はないものか色々と試している状態です。
Re: クラスからGameMainの関数にアクセスする方法
その問題のコードをさらしてくれませんかね。エルエン さんが書きました:返信ありがとうございます。
実は同じような方法は試したのですが、クラス側でnewでインスタンスを作成するとウィンドウが立ち上がったまま、フリーズしたような状態になってしまうのです。
逆にnewを使わないと関数までは流れるのですが、関数を呼び出すコードで「オブジェクト参照がオブジェクト インスタンスに設定されていません。」というエラーが出てしまいまして、今はクラス側でnewを使わずにアクセスする方法はないものか色々と試している状態です。
そうすればもっとピンポイントなアドバイスができると思うのですが。
written by へにっくす
Re: クラスからGameMainの関数にアクセスする方法
DXライブラリだからというよりもC#側に問題があるような気がします
私は一応これでできました。
私は一応これでできました。
// 親フォーム
namespace CStest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
label1.Text = "DXC#ライブラリテスト";
sub subform = new sub(this);
subform.Show();
}
}
}
Re: クラスからGameMainの関数にアクセスする方法
ホヅミさんのおっしゃった方法で子フォームから親フォームの関数を呼び出すことができます。
別の例を挙げます。
子フォームのShowメソッドに親フォーム自身(this)を渡し親子関係を設定し、親フォームの関数を呼び出したいときは
((親フォーム)this.Owner).呼びたい関数();
で呼び出すことができます。
Showメソッドにthisを渡さなくても、f2.Owner = this; のように設定してやることもできます。
こちらの方法は親と子の関係がある場合に限り使えますが、ただ他のフォームにアクセスしたいなら、
ホヅミさんが挙げた例のほうを使います。
別の例を挙げます。
//親フォーム
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();
}
}
((親フォーム)this.Owner).呼びたい関数();
で呼び出すことができます。
Showメソッドにthisを渡さなくても、f2.Owner = this; のように設定してやることもできます。
こちらの方法は親と子の関係がある場合に限り使えますが、ただ他のフォームにアクセスしたいなら、
ホヅミさんが挙げた例のほうを使います。
Re: クラスからGameMainの関数にアクセスする方法
重ね重ねありがとうございます。
今回はC#のFormではなくDXライブラリで作成したウィンドウを表示しているので、Form関係の関数が使えない状態でした。
子Formから親Formにアクセスするように、クラスからMainGameクラスにアクセスできないかと考えていたのですが、誤解を招く書き方をしてしまったかもしれません。
GameMainクラス
キャラメイキングクラス
それで今回質問させていただいた方法とは別の方法が頭に浮かびまして、こちらの方法が駄目ならそちらを使って、解決のチェックも一応入れさせていただきます。
今回返信していただいたお三方には、本当に感謝しております。
ありがとうございました。
今回は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);
}
今回返信していただいたお三方には、本当に感謝しております。
ありがとうございました。