C# アプリケーション開発では、フォーム間の値の転送操作は避けられず、頻繁に遭遇する操作です。
たとえば、あるフォームで別のフォームを呼び出し、値を渡し、戻り値を取得する一般的なメソッドは何ですか?
一般に、これはプロジェクトのパブリック変数、フォームのパブリック変数 (フィールドとアクセス プロパティ)、フォーム コンストラクター、デリゲート、およびイベントを通じて実現されます。
1. パブリック変数を使用する
初期開発では、アクセス競合を効果的に回避できる限り、パブリック変数を使用して多くのことが実行できます。
パブリック アクセス クラスを定義します。
internal class GlobalVar
{
private static string _StrPsp = "";// 私有静态字段
public static string StrPsp // 公有静态属性
{
get { return _StrPsp; }
set { _StrPsp = value; }
}
}
form2 の値を変更します。
GlobalVar.StrPsp = "这是改变后的值";
DialogResult = DialogResult.OK;
Close();
form2 フォームを呼び出して戻り値を取得します。
//可以处理GlobalVar.StrPsp
//......
Form2 form = new Form2();
DialogResult FrmSelect = form.ShowDialog();
if (FrmSelect == DialogResult.OK)
{
// 获取返回值
MessageBox.Show( GlobalVar.StrPsp);
// 处理返回值
}
else
{
//不取值
MessageBox.Show("没有改变值");
}
ShowDialog メソッドを使用する必要はありません。これは、アクセスを集中させ、アクセスの競合を回避するためだけです。
2. ShowDialog メソッドを使用する
ShowDialog メソッドを使用してフォームを開いてモーダル ダイアログ ボックスとして設定します。フォームが閉じるのを待った後、そのパブリック プロパティまたはメソッドにアクセスして戻り値を取得できます。
上記との違いは、前のメソッドはプロジェクト全体のパブリック変数にアクセスするのに対し、このメソッドはフォームのパブリック変数にアクセスすることです。ここでは、フォームを開いて値を代入し、アクセス完了後に戻り値を取得していますが、これらはすべてフォームのパブリック変数にアクセスすることで実現されています。
例えば:
form3 フォームでアクセス変数を定義します。
public string StrReturn { get; private set; }
結果を返す必要がある場合は、戻り値を変更します。
StrReturn = "这是改变后的返回值";
DialogResult = DialogResult.OK;
Close();
移行:
Form3 form = new Form3();
MessageBox.Show(form.ReturnValue,"改变前的值");
DialogResult result = form.ShowDialog();
if (result == DialogResult.OK)
{
// 获取返回值
MessageBox.Show(form.StrReturn);
}
アクセスする必要がある変数が多数または複雑な場合は、次のようにクラスを定義することで実現できます。
public static class NetInfo
{
private static string _IpAddress;
public static string IpAddress
{
get { return _IpAddress; }
set { _IpAddress = value; }
}
}
form3 の戻り値:
NetInfo.IpAddress = "1.2.3.4";
DialogResult = DialogResult.OK;
Close();
戻り値を抽出します。
Form3 form = new Form3();
MessageBox.Show(Form3.NetInfo.IpAddress,"改变前的值");
DialogResult result = form.ShowDialog();
if (result == DialogResult.OK)
{
// 获取返回值
string value = Form3.NetInfo.IpAddress;
MessageBox.Show(value);
}
上記の 2 つの方法は、プロジェクトのパブリック変数とフォームのパブリック変数を介して値の転送と戻り値を取得する方法であり、シンプルで実用的、高速かつ便利です。
多くのアプリケーション開発ツールには、デフォルトで渡されるパブリック オブジェクトがあり、これは中間パサーに相当し、データ転送ステーションの役割を果たします。
3. パスイベント
パラメーターはフォームのコンストラクターを通じて渡され、戻り値はイベント コールバックを通じて取得されます。
パブリック アクセス クラスを定義します。
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
アクセスする必要があるフォーム form4 で定義します。
public event EventHandler<Student> ReturnValueEvent;//回调事件
private Student MyStudent;
form4 のコンストラクター:
public Form4(Student student)
{
InitializeComponent();
MyStudent = student;
}
戻り値:
MyStudent.Id = 2;
MyStudent.Name = "Java";
MyStudent.Age = 3;
//MessageBox.Show(MyStudent.Name);
// 触发事件,传递返回值
ReturnValueEvent?.Invoke(this, MyStudent);
Close();
form4 フォームを呼び出し、値を渡し、戻り値を取得します。
Student student = new Student();
student.Name = "C#";
student.Id = 1;
student.Age = 2;
Form4 targetForm = new Form4(student);
targetForm.ReturnValueEvent += targetForm_ReturnValueEvent;//订阅事件
targetForm.ShowDialog();
イベント処理:
private void targetForm_ReturnValueEvent(object sender, Student student)
{
// 处理返回值
MessageBox.Show(student.Name);
}
4. 代表団を通じて
呼び出し元はアクセス クラスを定義する準備ができています。
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
ステートメント処理方法:
private void Form_ReturnValueCallback(Student MyStudent)
{
// 处理返回值
MessageBox.Show(MyStudent.Name);
}
フォーム 4 を呼び出します:
Form4 frm4= new Form4();
frm4.ReturnValueCallback = Form_ReturnValueCallback;
frm4.Show();
呼び出されるフォームでデリゲートを定義します。
public Action<Student> ReturnValueCallback { get; set; }
戻り値:
Student student1 = new Student();
student1.Id = 2;
student1.Name = "C#";
student1.Age = 3;
// 调用委托,传递返回值
ReturnValueCallback?.Invoke(student1);
Close();
上記は、フォーム間で値を転送するための 4 つの一般的な操作をまとめたもので、プロジェクト開発中の実際の状況に応じて選択できます。