C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: 文字配列での引数が渡せません。


(過去ログ 49 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■26971 / inTopicNo.1)  文字配列での引数が渡せません。
  
□投稿者/ 裕猫 (86回)-(2008/10/24(Fri) 09:30:53)

分類:[C#] 

文字配列を使って引数を渡そうとするのですが、文字配列の内容が渡せません。
private void Form1_Paint(object sender, PaintEventArgs e)
{
IllustClass.Paint(Haikei, Hito, X, e.Graphics);
}
の引数に
private void CG(string Ha, string Hi, int XX)
{
Haikei = Ha;
Hito = Hi;
X = XX;
this.Invalidate();
}
で設定したHa、Hiをswitch文で
public void Setting()
{
switch (UT)
{
case "Unit0":
TenBack[0] = "背景\\bg01.bmp";
TenChar[0] = "キャラ\\のぞみ\\m01.bmp";
TenVoice[0] = "声\\Damejanai.wav";

TenBack[1] = "背景\\bg01.bmp";
TenChar[1] = "キャラ\\のぞみ\\n06.bmp";
TenVoice[1] = "声\\Damejanai.wav";

TenBack[2] = "背景\\bg01.bmp";
TenChar[2] = "キャラ\\のぞみ\\n06.bmp";
TenVoice[2] = "声\\Raikou.wav";

TenBack[3] = "背景\\bg01.bmp";
TenChar[3] = "キャラ\\のぞみ\\n04.bmp";
TenVoice[3] = "声\\Raikou.wav";

TenBack[11] = "背景\\bg01.bmp";
TenChar[11] = "キャラ\\のぞみ\\n02.bmp";
TenVoice[11] = "声\\Saikouyo.wav";
break;
}
}
設定した物を
CG(TenBack[0], TenChar[0], 230);
のように渡して実行しているのですが(TenBack[0], TenChar[0]をTenBack[3], TenChar[3]というように変えて使う )Paint文に引数がわたっていなくて、Paint文の中で引数がnullだというエラーになってしまいます。
TenBack = "背景\\bg01.bmp";
TenChar = "キャラ\\のぞみ\\n04.bmp";
と設定して
CG(TenBack, TenChar, 230);
で実行するとPaint文はエラーを出さずに実行されます。
やりたいことは得点によってCGを替えるのですが、文字配列で引数を渡す方法はないのでしょうか?ご存知の方教えてください。

引用返信 編集キー/
■26972 / inTopicNo.2)  Re[1]: 文字配列での引数が渡せません。
□投稿者/ やじゅ (722回)-(2008/10/24(Fri) 09:44:53)
やじゅ さんの Web サイト
No26971 (裕猫 さん) に返信

private void CG(string Ha, string Hi, int XX)
{
Haikei = Ha;
Hito = Hi;
X = XX;
//this.Invalidate();
IllustClass.Paint(Haikei, Hito, X, e.Graphics); // ←変更
}

引用返信 編集キー/
■26974 / inTopicNo.3)  Re[2]: 文字配列での引数が渡せません。
□投稿者/ 裕猫 (87回)-(2008/10/24(Fri) 10:26:32)
No26972 (やじゅ さん) に返信
> private void CG(string Ha, string Hi, int XX)
> {
> Haikei = Ha;
> Hito = Hi;
> X = XX;
> //this.Invalidate();
> IllustClass.Paint(Haikei, Hito, X, e.Graphics); // ←変更
> }
>
返信ありがとうございます。早速試したところIllustClass.Paint(Haikei, Hito, X, e.Graphics); で
エラー 1 引数を '3' 個指定できる、メソッド 'Paint' のオーバーロードはありません。
が出ました。
引用返信 編集キー/
■26975 / inTopicNo.4)  Re[1]: 文字配列での引数が渡せません。
□投稿者/ よねKEN (201回)-(2008/10/24(Fri) 10:29:30)
SettingメソッドとCGメソッドはいつ呼び出しているのですか?

> CG(TenBack[0], TenChar[0], 230);
> のように渡して実行しているのですが(TenBack[0], TenChar[0]をTenBack[3], TenChar[3]というように変えて使う )Paint文に引数がわたっていなくて、Paint文の中で引数がnullだというエラーになってしまいます。

TenBack[0]やTenChar[0]の中身がnullになっているということだと思うので、
Settingメソッドが呼び出されていない状態でCGメソッドが呼び出されているのでは?

> TenBack = "背景\\bg01.bmp";
> TenChar = "キャラ\\のぞみ\\n04.bmp";
> と設定して
> CG(TenBack, TenChar, 230);
> で実行するとPaint文はエラーを出さずに実行されます。

ここでのTenBackやTenCharは実験的に配列とせず単体のString変数として宣言して
使ってみた場合、ということでOKですかね?
上記のTenBackやTenCharに値をセットしている処理はどこに記述しているのですか?

> やりたいことは得点によってCGを替えるのですが、文字配列で引数を渡す方法はないのでしょうか?ご存知の方教えてください。

文字列の変数か文字列配列の変数ということが問題なのではなく、
bmpのパスを設定する処理の呼び出しタイミングが問題だと思います。

処理タイミングについてもう少し説明をいただくか、
処理が再現できる最小限のコードを提示していただくのがよいかと思います。

引用返信 編集キー/
■26976 / inTopicNo.5)  Re[2]: 文字配列での引数が渡せません。
□投稿者/ よねKEN (202回)-(2008/10/24(Fri) 10:33:17)
追記です。

> public void Setting()
> {
> switch (UT)
> {
> case "Unit0":

もう一つの可能性ですが、UTという変数に"Unit0"という値はセットされていますか?
Settingメソッドが正しいタイミングで呼ばれていたとしても、
TenBackやTenCharの各要素に期待通りに値がセットされていない可能性もありますよ。

・それぞれのメソッドが期待するタイミングで呼ばれているか
・各変数に期待する値が正しくセットされているか
をDebugオブジェクトやステップ実行を使って確認しましょう。

引用返信 編集キー/
■26980 / inTopicNo.6)  Re[3]: 文字配列での引数が渡せません。
□投稿者/ やじゅ (723回)-(2008/10/24(Fri) 11:06:54)
やじゅ さんの Web サイト
No26974 (裕猫 さん) に返信
> 返信ありがとうございます。早速試したところIllustClass.Paint(Haikei, Hito, X, e.Graphics); で
> エラー 1 引数を '3' 個指定できる、メソッド 'Paint' のオーバーロードはありません。
> が出ました。

失礼しました、見落とてしました(^^;
e.Graphics → this.CreateGraphics にしてみるとか

IllustClass.Paint(Haikei, Hito, X, this.CreateGraphics);
引用返信 編集キー/
■26982 / inTopicNo.7)  Re[3]: 文字配列での引数が渡せません。
□投稿者/ 裕猫 (88回)-(2008/10/24(Fri) 11:26:36)
No26976 (よねKEN さん) に返信
返信ありがとうございます。
>SettingメソッドとCGメソッドはいつ呼び出しているのですか?
settingメソッドは開始後comboBox1.Textを選択しOKボタンをクリック直後にOKボタンクリックイベントの最初に実行します。
流れとしては
オープニング画面で実行するプログラムをcomboBox1で選択し、okボタンで開始します。そのときにcomboBox1.Textがnullならば何もせず
comboBox1.Textに何か選択されていれば UT に保存し対応する画像データをpublic void Setting()で設定します。
プログラム終了後点数によりswitch (UT)でCGデータを選択し表示します。
>>public void Setting()
>>{
>>switch (UT)
>>{
>>case "Unit0":
>
> もう一つの可能性ですが、UTという変数に"Unit0"という値はセットされていますか?
せっとされています。
動作確認で
MessageBox.Show(TenBack + TenChar);
CG(TenBack, TenChar, 230);
とするとテキストボックスはセットする文字を返します。
CG(TenBack, TenChar, 230);
     ↓
private void Form1_Paint(object sender, PaintEventArgs e)
{
IllustClass.Paint(Haikei, Hito, X, e.Graphics);
}
の間で消えているとしか思えないのです。で引数に文字配列は使えないのかなと疑ったのでお聞きしてみたのですが…

引用返信 編集キー/
■26984 / inTopicNo.8)  Re[4]: 文字配列での引数が渡せません。
□投稿者/ 裕猫 (89回)-(2008/10/24(Fri) 11:39:21)
修正
> 流れとしては
> オープニング画面で実行するプログラムをcomboBox1で選択し、okボタンで開始します。そのときにcomboBox1.Textがnullならば何もせず
> comboBox1.Textに何か選択されていれば UT に保存し対応する画像データをpublic void Setting()で設定します。
プログラム終了後点数によりif文でTenBack[0〜11]を決めCGデータを選択し表示します。
>
12種類の動作を読み込みデータとCGをセットで設定し、表示判別のルーチンを共通でしようしています。
TenBack[0] = "背景\\bg01.bmp";
TenChar[0] = "キャラ\\のぞみ\\m01.bmp";
TenVoice[0] = "声\\Damejanai.wav";
はそれぞれ12種類の別パターンが存在します。(;;)ので、サンプルを作ろうとしましたが、リストがでかくなりすぎるので、表示きついかなとおもいます。すみません。
引用返信 編集キー/
■26988 / inTopicNo.9)  Re[4]: 文字配列での引数が渡せません。
□投稿者/ よねKEN (203回)-(2008/10/24(Fri) 11:51:00)
> >SettingメソッドとCGメソッドはいつ呼び出しているのですか?
> settingメソッドは開始後comboBox1.Textを選択しOKボタンをクリック直後にOKボタンクリックイベントの最初に実行します。
> 流れとしては
> オープニング画面で実行するプログラムをcomboBox1で選択し、okボタンで開始します。そのときにcomboBox1.Textがnullならば何もせず
> comboBox1.Textに何か選択されていれば UT に保存し対応する画像データをpublic void Setting()で設定します。
> プログラム終了後点数によりswitch (UT)でCGデータを選択し表示します。

裕猫さんの横で一緒に画面見ながら話しているわけではないので、
この状況説明では詳しい状況がわかりません。
問題を再現できる最小限のコードを提示できませんか?

> ここでのTenBackやTenCharは実験的に配列とせず単体のString変数として宣言して
> 使ってみた場合、ということでOKですかね?

についてはどうなんですか?
最新のコードではTenBack、TenCharは配列のはずなので、
最初の投稿でご説明されているようにはTenBack、TenCharを使うことはできないはずです。
なので、実験のために一旦文字列の配列を使うのをやめたバージョンにソースを書き直して
実験されているのかな?と想像しています。

> >>public void Setting()
> >>{
> >>switch (UT)
> >>{
> >>case "Unit0":
>>
>>もう一つの可能性ですが、UTという変数に"Unit0"という値はセットされていますか?
> せっとされています。
> 動作確認で
> MessageBox.Show(TenBack + TenChar);
> CG(TenBack, TenChar, 230);
> とするとテキストボックスはセットする文字を返します。

今回うまくいかないとして質問されている件のコードでは、
TenBackやTenCharは配列のはずです。問題になっているコードで
各変数の値を確認していただかないと意味がありません。

> の間で消えているとしか思えないのです。で引数に文字配列は使えないのかなと疑ったのでお聞きしてみたのですが…

使おうとしているのは文字列の配列で、引数に渡すのはその1要素なのでただの文字列です。
用語は適切に使いましょう。
で、文字列の配列の1要素をメソッドの引数に渡すのは何ら問題なくできることです。

なので、処理のタイミングが不適切か、private/publicな変数に期待する値が期待するタイミングで
設定されていないだけと睨んでいます。ですが、ソースコードを見ることができませんので、
ここですよ、とは指摘できません。

> ・それぞれのメソッドが期待するタイミングで呼ばれているか
> ・各変数に期待する値が正しくセットされているか
> をDebugオブジェクトやステップ実行を使って確認しましょう。

なので上記のように先ほど回答しました。

具体的にはprivate/public変数をセットしているであろう箇所の直後と
その変数を使おうとする箇所の直前にDebug.WriteLineでその変数の値をデバッグ出力してみれば、
何が原因かはすぐにわかると思います。
(Paintイベントが絡むので今回はステップ実行は使わない方がよいと思います)

ところで、変数Haikei, Hitoにはその画面を表示する前に最初に何かbmpのパスをいれていますか?
入れていないと一番最初のPaintイベント発生時にエラーになりますけど。


引用返信 編集キー/
■26989 / inTopicNo.10)  Re[5]: 文字配列での引数が渡せません。
□投稿者/ 初心者 (168回)-(2008/10/24(Fri) 11:55:46)
No26984 (裕猫 さん) に返信
> 修正
>>流れとしては
>>オープニング画面で実行するプログラムをcomboBox1で選択し、okボタンで開始します。そのときにcomboBox1.Textがnullならば何もせず
>>comboBox1.Textに何か選択されていれば UT に保存し対応する画像データをpublic void Setting()で設定します。
> プログラム終了後点数によりif文でTenBack[0〜11]を決めCGデータを選択し表示します。
>>
> 12種類の動作を読み込みデータとCGをセットで設定し、表示判別のルーチンを共通でしようしています。
> TenBack[0] = "背景\\bg01.bmp";
> TenChar[0] = "キャラ\\のぞみ\\m01.bmp";
> TenVoice[0] = "声\\Damejanai.wav";
> はそれぞれ12種類の別パターンが存在します。(;;)ので、サンプルを作ろうとしましたが、リストがでかくなりすぎるので、表示きついかなとおもいます。すみません。

配列の中身をずっとトレース実行で確認なさってみては?(もう試しているのでしたらスルーしてください)
引用返信 編集キー/
■27001 / inTopicNo.11)  Re[6]: 文字配列での引数が渡せません。
□投稿者/ 裕猫 (90回)-(2008/10/24(Fri) 13:36:34)
皆さんに返信
ようやく原因が判明しました。文字配列の中の1データのみが1文字 n が m になっていて現象を出していたようです。トレースも何回もやってかなり注意して見ていたのに気づきませんでした。2日も…大変お騒がせして申し訳ありませんでした。結果がわかると顔から火が出そうなくらいはずかしい原因でしたが、みなさまのご協力に感謝いたします。ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -