プロジェクトに3つのフォームがあり、C#のフォーム間でデータを転送するときにフォームを呼び出す方法は?
-
06-07-2019 - |
質問
プロジェクトform1、form2、form3に3つのフォームがあり、プロジェクトform4にもう1つ追加しました。最初の3つのフォームは、ShowDialog()を介して既にリンクされています。
Program.csファイルに触れたくない。
最初にフォーム4を起動フォームとして呼び出すにはどうすればよいですか。以前のフォーム1は、プロジェクトに表示される最初のフォームでした。
また、form1 rdb1とrdb2に2つのラジオボタンがあります。 私のform2では、ボタンSelectにopenFileDialogがアタッチされています。今、ユーザーがform1でrdb1を選択すると、form2のopenFileDialogのフィルターは「.XML」のみでファイルを開く必要があります。拡張子として、かつrdb2がForm1で選択され、Form2でのみ「.TXT」が選択された場合。ファイルを開くことができます。
インテリセンスでこの構文を見つけることができません。助けていただけますか?
事前に感謝します。
解決
Program.csファイルに触れたくない理由を説明できますか?これはまさに、起動フォームを変更する場所です。
変更:
Application.Run(new Form1());
to:
Application.Run(new Form4());
第二に、Filterプロパティを使用してOpen-およびSaveFileDialogにフィルターを設定できます。次のような値に設定します。
XML Files|*.xml
またはテキストの場合:
Text Files|*.txt
編集して追加:
別のフォームからこれを行うには:
class Form1 {
Form2 form2;
void Form1_Load(object sender, EventArgs e) {
form2 = new Form2();
}
void rdb1_CheckedChanged(object sender, EventArgs e) {
if (rdb1.Checked)
form2.openFileDialog1.Filter = "XML Files|*.xml";
else
form2.openFileDialog1.Filter = "Text Files|*.txt";
}
}
Form2デザイナーのopenFileDialog1のModifiersプロパティを" Public"に設定していることを確認してください。または「内部」クラス自体の外部からアクセスできるようにします。
他のヒント
program.csをタッチする必要があります。そこで最初のフォームが作成され、実行されます。
新しいwinformsプロジェクトを作成し、program.csを開きます。 Application.Runが呼び出される場所は、スタートアップフォームのインスタンスで確認できます。それがあなたがしなければならないことです。
怖がらないでください。すべて大丈夫です。
コメントへの応答:
Form1_Loadイベントは、Form1内でForm1によって 発生します。コールチェーンに戻って、Form1がインスタンス化され、Application.Runに渡される場所を見つける必要があります。そして、それはprogram.csにあります。
やる。そして、C#経由でCLRのコピーを取得します。後悔することはありません(最初の数章をスキップする限り!)
最初にフォーム4を起動フォームとして呼び出すにはどうすればよいですか?
Program.csファイルに触れたくない。
なぜProgram.csに触れないのですか? Application.Run(..)に渡されたフォームインスタンスが起動フォームを決定します。