- ベストアンサー
C#イベントで変数の受け渡しをする方法
- C#初心者の方へ、C#イベントで変数の受け渡しをする方法について教えます。
- Windowsのフォームアプリケーションにおいて、ボタンのクリックイベントにファイルを読み込む処理を登録する場合、イベントで定義した文字列の配列を使用します。
- しかし、この配列はイベントが終了すると存在しなくなってしまいます。C#にはグローバル変数という概念はないため、擬似的に作る必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
グローバルの定義が分かりませんし、何がしたいのかよく分かりません。 フォーム内だけで有効であって欲しいならprivateメンバ変数にすればいいし、 アプリケーション全体で有効であって欲しいなら、staticクラスでも用意すれば良いでしょう。 また、配列の要素数が毎度毎度変化したとしても、受け口が配列を受ける変数ならば 特に問題ないように思えますが。 【Form1.cs】 namespace WindowsApplication1 { public partial class Form1 : Form { private string[] hoge; private void button2_Click(object sender, EventArgs e) { //string[] hoge; ←元々コードしていると思われる宣言 string[] fuga = { "a", "b", "c", "d" }; ←ファイルを読んだと仮定 hoge = fuga; Console.WriteLine(hoge.Length); ////HogeClass.hoge = fuga; ←////部分をコメントインするとHogeClassを使う ////Console.WriteLine(HogeClass.hoge.Length); string[] piyo = { "a", "b" }; hoge = piyo; Console.WriteLine(hoge.Length); ////HogeClass.hoge = piyo; ////Console.WriteLine(HogeClass.hoge.Length); } } } 【HogeClass.cs】 using System; using System.Collections.Generic; using System.Text; namespace WindowsApplication1 { public class HogeClass { public static string[] hoge; } }
その他の回答 (1)
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
> HogeClass.hoge = hoge;とすれば、HogeClassでForm1のローカルのhoge > すなわち、huga配列を使えると言うことですか? そうです。 staticにするとかインスタンスを作るとか、いろんなやり方が ありますが、新たなクラスを使おうが、メンバ変数を設けようが、 受け口が渡す変数の型と一緒なら入ります。 これは別にC#に限った話ではありません。
お礼
長年挑戦しては、挫折してました。ここがよく分からなかったのが、原因の一つです。少し分かりました。コンソールアプリケーションは昔の知識で幾分分かったような気もしてましたが、ウィンドーズアプリケーションは更に複雑です。 基本を良く理解してれば、そうでも無いのかもしれませんが、デバッカーなしには何も作れない、素人なので、楽しみに作りたいのですが、苦労を背負うことにもなりそうです。 今後も分からないことが有れば質問しますので、よろしくお願いします。
お礼
長年分からなかったことがお陰様で、解決しました。有り難う御座います。
補足
確認のためですが、HogeClassで public static string [] hoge;この時点では、hogeの大きさは不明ですよね。 Form1でもprivate string [] hogeが有ります。 HogeClass.hoge = hoge;とすれば、HogeClassでForm1のローカルのhoge すなわち、huga配列を使えると言うことですか?