c#で次の次のフォームへのデータの渡し方
お世話になります。
c#初心者です。
フォーム1にはbuttonが2つあり、どちらを押したかで
次(フォーム2)の次のフォーム(フォーム3)を開く時に
そのフォームにあるボタンを表示させるか・非表示にさせるか
したいと思っております。
中途半端ですが下記の様なコードを書いておりましてその先
フォーム3での記述をどの様に書いたら良いのか行き詰って
しまいました。
どなたかご親切な方、ご教示頂きたく宜しくお願い申し上げます。
記
クラス
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WindowsFormsApplication1
{
public class Keikaku
{
public enum Mode
{
Syuuse,
Syoukai
}
}
}
----------------------------------
フォーム1
namespace WindowsFormsApplication1
{
public partial class MainMenu : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form2 cForm2 = new Form2();
cForm2.Syuusei = Keikaku.Mode.Syuusei;
cForm2.ShowDialog();
}
private void button2_Click(object sender, EventArgs e)
{
Form2 cForm2 = new Form2();
cForm2.Syuusei = Keikaku.Mode.Syoukai;
cForm2.ShowDialog();
}
}
}
----------------------------------
フォーム2
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private Keikaku.Mode _kakunin;
public Keikaku.Mode Syuusei
{
set
{
_kakunin = value;
}
}
private void button1_Click_1(object sender, EventArgs e)
{
Form3 cForm3 = new Form3();
cForm3.ShowDialog();
}
}
}
----------------------------------
フォーム3
namespace WindowsFormsApplication1
{
public partial class Form3 : Form
{
}
}
No.2ベストアンサー
- 回答日時:
Form1→Form2→Form3の時
極力データの引き回しを避けるならすでにForm1のボタンによって設定値の違っている_kakuninの値を利用します。(Keikaku.Modeのクラスなり型において「==」演算子が有効な場合ですが)
(1)Form3クラスに状態通知用のpublicメソッドと表示状態のプロパティを作ります。
private bool piyo = false;
public void hoge(bool btn_sts)
{
// Form1のボタン状態によってForm3の状態を決定する
// (引数は適当)
this.piyo = btn_sts;
}
(2)Form2でのForm3の生成直後に(1)のメソッドを呼びます。
private void button1_Click_1(object sender, EventArgs e)
{
Form3 cForm3 = new Form3();
cForm3.hoge(this._kakunin == Keikaku.Mode.Syoukai); // 例
cForm3.ShowDialog();
}
(3)Form3のロード時にコントロールの表示非表示を行ないます。
private void Form3_Load(...)
{
// (1)で取得した状態にしたがってボタンの表示/非表示の処理
this.buttonA.visible = this.piyo; // 例
}
何らかの理由で_kakuninの値が使えないときはForm1→Form2において、Form2→Form3と同様なメソッドの呼出でボタンの状態を渡すようにします。
また、上記ではForm1のbutton1ならfalse, button2ならtrueのbool値で状態を判別していますが、Form1のボタンの数が3個以上とかならint型の整数で扱う形にする必要があります。
No.1
- 回答日時:
(1)Form3クラスに状態通知用のpublicメソッドと表示状態のプロパティを作ります。
private bool piyo = false;
public void hoge(bool btn1, bool btn2)
{
// Form1のボタン状態によってForm3の状態を決定する
// (引数は適当)
if (btn1) piyo = true; // 例
if (btn2) piyo = false; // 例
}
(2)Form1でのForm3の生成直後に(1)のメソッドを呼びます。
private void button1_Click_1(object sender, EventArgs e)
{
Form3 cForm3 = new Form3();
cForm3.hoge(true, false); // ShowDialogより前
cForm3.ShowDialog();
}
(3)Form3のロード時にコントロールの表示非表示を行ないます。
private void Form3_Load(...)
{
// (1)で決定した状態にしたがってボタンの表示/非表示の処理
this.buttonA.visible = piyo; // 例
}
早々にご回答頂きありがとうございます。
しかし、フォーム1から直でフォーム3を開くのではなくて、フォーム2を経由
してから開きたいのです。ですので、フォーム1のtrueかfalseの情報をフォーム2
でも保持して置き、フォーム2からフォーム3を開いた時にその保持していた
trueかfalseの情報を活用したいのです。
分かりにくい説明で申し訳ございませんが、この場合のやり方はいかがでしょうか。
何卒、宜しくお願い申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#】別フォームも同時に閉じ...
-
C#で、ある条件でFormが自動で...
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
グラフの交点の求め方(Excel)
-
コントロールの書式設定で、“コ...
-
VBAのフォント変更(エクセルか...
-
マインクラフト(pc版)で座標...
-
フォントの大きさ
-
Minecraft 統合版(PC)の描画距...
-
3次元空間上の2つの座標から...
-
vbaから他のアプリを終了
-
Vba LongPtrについて教えてくだ...
-
Excelの上下を固定したい
-
他のウィンドウのボタンを自動...
-
ActiveXコントロールを.NETにイ...
-
コンボボックス内の文字サイズ変更
-
エクセルのコントロールツール...
-
スピンボタンを右クリックして...
-
DateTimePickerでに年月までし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#】別フォームも同時に閉じ...
-
C#で、ある条件でFormが自動で...
-
C# フォームを閉じてもプログラ...
-
C# 自分自身のコントロールを指...
-
C#でテキストボックスをクリッ...
-
C# FlowLayoutPanelのコントロ...
-
ASP.NetでJavaScriptからポスト...
-
OutLookのメール受信通知 (C#)
-
別フォームからdatagridviewの削除
-
C#Windowsフォームアプリケーシ...
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
コントロールの書式設定で、“コ...
-
フォントの大きさ
-
コンボボックス内の文字サイズ変更
-
グラフの交点の求め方(Excel)
-
エクセルのコントロールツール...
-
VBAのフォント変更(エクセルか...
-
マインクラフト(pc版)で座標...
-
VB.NET2005 TextBox 高さ(Heig...
おすすめ情報