以前は WinForm フォームの表示とフォーム間の値の転送についてあまり知りませんでした。
最近 WinForm 開発を行ったことがありますが、使用した関連知識は次のように整理されています
A. WinForm でのフォーム表示
表示フォームには次のようなものがあります。次の 2 つのメソッド:
Form.ShowDialog メソッド (フォームはモーダル フォームとして表示されます)
Form.Show メソッド (フォームはモードレス フォームとして表示されます)
2 つの具体的な違いは次のとおりです。 Form.Show メソッドを呼び出した後、Show メソッドの背後にあるコードはすぐに実行されます
2. Form.ShowDialog メソッドを呼び出した後、このメソッドの背後にあるコードはダイアログ ボックスが閉じるまで実行されません
3.モーダルフォームとして表示されている場合、「閉じる」ボタンをクリックするとフォームが非表示になり、DialogResult プロパティが DialogResult.Cancel に設定されます
モードレスフォームとは異なり、ユーザーがダイアログボックスのフォームを閉じるボタンをクリックするか、DialogResult の値を設定すると、
実際には、フォームの Visible プロパティを false に割り当てることで、フォームが非表示になります。
このようにして、ダイアログ ボックスの新しいインスタンスを作成せずに、非表示のフォームを再表示できます。
フォームが閉じられていないため、フォームが再度必要になった場合は、フォームの Dispose メソッドを呼び出してください。
フォームがモーダル モードで表示される場合は true、それ以外の場合は false を使用します。
ウィンドウ内ではボディが作成される前に表示モードを知ることができないため、フォームコンストラクターではModal属性は常にfalseに対応するため、Modal属性値はLoadイベント以降でのみ使用できます
フォーム関係の所有者を決定する方法?
Form クラスの Owner プロパティ: フォームの所有者
フォームが別のフォームによって所有されている場合、そのフォームは最小化され、所有者のフォームとともに閉じられます。
たとえば、フォーム Form1
Form2 f2 = new Form2 ( );
f2.ShowDialog ( this );
f2.Show ( this );
//or
f2.Owner = this;
f2 .ShowDialog( );
このように、f2のオーナーはForm1です
B.WinFormフォームの値の転送
特徴: 値の転送は一方向であり (値を相互に転送することはできません)、実装は簡単です
実装コードは次のとおりです:
int value1;
string value2;
public Form2 (int value1, string value2)
{
InitializeComponent ( );
this.value1 = value1;
this.value2 = value2;
}
フォーム Form1 で次のように呼び出します
new Form2 ( 111 , "222" ).Show ( ); //このように、2 つの値 111、"222" が静的変数を介して Form2
特徴: 値の転送は双方向であり、実装が簡単です
実装コードは次のとおりです。
public class app
{
public static string value;
}
Form1 で次のように呼び出します
app.value = "f2";静的メンバーに値を代入
new Form2 ( ).Show ( ); // Form2
this.Text = app.value // app.valueの値を取得
app.value; Form2"; //他のフォームから呼び出せるように、app.value に値を割り当てます
特徴: 簡単な実装
実装コードは次のとおりです:
public string Form2Value
{
get
これを返します。 .Form2Value = "Ok"; //Form2
f2 の textBox1 に値 Ok を代入します。 ShowDialog ( );
4. フォームのパブリック プロパティ値と Owner プロパティを使用する (推奨)
特徴: シンプルで柔軟な実装
実装コードは次のとおりです:
フォーム Form1 で
public int Form1Value = 1; Form2 f2 = new Form2 ( );
f2.ShowDialog ( this ); // Form2 の所有者として Form1 を Form2 に渡します
フォーム Form2 で
// Form2 の所有者は Form1 です
//Form1から取得した値は1です
MessageBox.Show ( f1.Form1Value .ToString ( ) );
//Form1に与えられたForm1Valueに値222を割り当てます
f1.Form1Value = 222;
5。フォームの public プロパティ値と Application.OpenForms プロパティ
説明: Application.OpenForms プロパティ: アプリケーションに属する開いているフォームのコレクションを取得します。 (このプロパティは .NET Framework バージョン 2.0 にあります)
実装コードは次のとおりです:
フォーム Form1 内
public int Form1Value = 1;
Form2 f2 = 新しい Form2 ( );
string formName = "Form1";
Form fr = Application.OpenForms [ formName ]; {
Form1 f1 = ( Form1 ) fr;
MessageBox.Show ( f1.Form1Value.ToString ( ) );
//Form1のForm1Valueの値を222に代入
f1.Form1Value = 222;
}
6. イベント
を通じて実装されるコードは次のとおりです:
フォーム Form2 でパブリック プロパティ Form2Value を定義し、textBox1 のテキスト値を取得および設定します
パブリック ストリング Form2Value
を定義します。 {
get
this.textBox1 を返します。
{
if ( accept != null )
{
Accept ( this , EventArgs.Empty );フォームはイベントをトリガーし、独自の参照を渡します
}
}
Form1
Form2 f2 = new Form2 ( );
f2 .accept += new EventHandler ( f2_accept );
void f2_accept ( object sender , EventArgs e )
{
/ /イベントの受信者は、単純な型変換を通じて Form2 への参照を取得します
Form2 f2 = (Form2) sender;
//Form2 から textBox1.Text を受け取ります
this.textBox1.Text = f2.Form2Value
}
;