今、以下のような流れを考えています
C#のwindowsアプリケーションでフォーム中のボタンを押す。
↓
このイベントで発生するoという配列を戻す
↓
他のボタンを押した時にoの値を引いてくる。
しかしながら、うまく処理できていません。
配列の大きさが未確定のoという配列を戻して他のイベントで使うにはどういう処理をしたらいいのでしょうか?
わかるかたがいましたら、教えていただけないでしょうか?
よろしくお願いします。
参考までに考えているプログラムを下に示します。
記述中のプログラム(voidをdoubleに変更してもうまくいきませんでした。
public void button3_Click(object sender, EventArgs e)
{
int a;
int b;
途中省略
double[, ,] o = new double[a, 50,b];
途中省略
return o
}
No.3ベストアンサー
- 回答日時:
>他のボタンを押すとdouble[, ,] o;に入力した値はNULLに戻ってしまいます。
フィールドに記述した内容と、
それぞれのボタンのイベントハンドラに記述した内容はどんなのですか?
public partial class Form1 : Form
{
double[,,] o;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
o = new double[2,3,4];
o[0, 0, 0] = 1.234;
}
private void button2_Click(object sender, EventArgs e)
{
if (o != null)
o[0, 0, 0] += 0.111;
}
}
これで、とりあえずbutton1を「1回」クリックした後で、button2をクリックしていくとo[0,0,0]は0.111ずつ増えていきますが。
# ブレークポイント設定して、ステップ実行で確認。
なお、その後button1をクリックすると先に確保していた分は破棄され、新たにnewで確保したモノに置き換わります。
# 破棄した分のメモリは後で回収されることになります。
再確保させないためには…
if(o == null)
o = new double[2,3,4];
ってな感じになるでしょうかね。
button1_Click()でnewしている箇所を
double[,,] o = new double[2,3,4];
としてはダメですよ。
この場合は「フィールドのo」ではなく「ローカル変数のo」を作成しているだけですから、イベントハンドラから抜けると「ローカル変数のo」は破棄されます。
ありがとうございます。うまくいきました。
本当にありがとうございます。
ずっと悩んでたことがやっと解決できました。
ミスはご指摘の下記内容でした。
button1_Click()でnewしている箇所を
double[,,] o = new double[2,3,4];
としてはダメですよ。
この場合は「フィールドのo」ではなく「ローカル変数のo」を作成しているだけですから、イベントハンドラから抜けると「ローカル変数のo」は破棄されます
No.2
- 回答日時:
>newして割り当てた場合、フォームのフィールドとイベントパンドラ内で2重の定義になり、
>既にスコープされていると表示されてしまいました。
フィールドには
double[, ,] o;
だけ。
コンストラクタでもnewしないでおきます。
# o = null;くらいはいいかもしれませんが。
で、
public void button3_Click()内では、
o = new double[a, 50,b];
とします。
ありがとうございます。
それも行ったのですが。
他のボタンを押すとdouble[, ,] o;に入力した値はNULLに戻ってしまいます。
No.1
- 回答日時:
>このイベントで発生するoという配列を戻す
どこに戻すのでしょうか?
掲示されたコードだと、イベントハンドラの呼び出し元に返していますが、呼び出し元が戻り値としてソレを要求していますか?
>public void button3_Click(object sender, EventArgs e)
なので戻り値はなしのハズですが……。
# returnの行で警告かエラーになっていませんか?
おそらくフォームでしょうから、フォームのフィールドにdouble[, ,] o;を加えて、イベントハンドラ内(button3_Click()内)でnewして割り当てればよいかと。
>他のボタンを押した時にoの値を引いてくる。
では、oがnullかどうか判定してから処理するようにします。
ありがとうございます。
newして割り当てた場合、フォームのフィールドとイベントパンドラ内で2重の定義になり、
既にスコープされていると表示されてしまいました。
どうしたら解決できるのでしょうか?
調べているのですが、わかりません。追加の質問になり申し訳ありません。可能であれば教えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
関数におけるif文とreturn文に...
-
待ち行列シュミレーションのプ...
-
C言語の型による処理速度の違い
-
doubleの変数にintとintの割り...
-
浮動小数点数が表示されないん...
-
int とdoubleの比較
-
C言語を実行すると-infが出てき...
-
浮動小数点の定数
-
2次方程式の解を求めるプログ...
-
C言語の問題です。
-
C言語 関数プロトタイプ宣言の...
-
ボール同士の衝突
-
C言語 初心者です
-
2分法で方程式の複数の解を自...
-
C言語で-23乗を取り扱うには
-
相互相関関数
-
物体が往復する動きを作りたい
-
サンプル遅れ
-
doubleは常に%lfとするべきなのか
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
doubleの変数にintとintの割り...
-
c言語で、繰り返し文の中で、0....
-
C 開放してるのにエラー(doubl...
-
C言語を実行すると-infが出てき...
-
float型とdouble型の変数の違い...
-
至急です! マクロ定義で #defi...
-
C言語の型による処理速度の違い
-
関数におけるif文とreturn文に...
-
C言語 関数プロトタイプ宣言の...
-
浮動小数点の定数
-
int とdoubleの比較
-
doubleは常に%lfとするべきなのか
-
difftime()について
-
C言語でdouble型の小数点の引き...
-
たくさんの数の平均を求める方...
-
斜辺と角度て底辺と高さを出したい
-
C言語で台形公式を使った二重積...
-
float?数字の後にLがつくもの
-
listに構造体を格納
おすすめ情報