ボタンでShow()/ ShowDialog()を使用せずに、2つのフォーム間でテキストボックスの値をテキストボックスに送信するにはどうすればよいですか?textBoxは、フォームを開かなくても値を取得します。
3 に答える
テキストボックスデータにアクセスするには、次を使用する必要があります:textBox1.Text
フォームはオブジェクトであるため、テキストボックスの値を更新するメソッドを定義できます(テキストボックス自体をパブリックアクセサーで公開できます)
親から子フォームに情報を渡すには、子フォームに受信する必要のあるデータのプロパティを作成してから、親フォームにそのプロパティを設定させる必要があります(たとえば、ボタンをクリックしたとき)。
子フォームで親フォームにデータを送信するには、子フォームで親フォームに送信するデータを使用してプロパティ(ゲッターである必要があるだけ)を作成する必要があります。Form
次に、親がサブスクライブできるイベントを作成する(または既存のイベントを使用する)必要があります。
例:
namespace PassingDataExample
{
public partial class ParentForm : Form
{
public ParentForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ChildForm child = new ChildForm();
child.DataFromParent = "hello world";
child.FormSubmitted += (sender2, arg) =>
{
child.Close();
string dataFromChild = child.DataFromChild;
};
child.Show();
}
}
}
namespace PassingDataExample
{
public partial class ChildForm : Form
{
public ChildForm()
{
InitializeComponent();
}
public string DataFromParent { get; set; }
public string DataFromChild { get; private set; }
public event EventHandler FormSubmitted;
private void button1_Click(object sender, EventArgs e)
{
DataFromChild = "Hi there!";
if (FormSubmitted != null)
FormSubmitted(this, null);
}
}
}
「Show()/ShowDialog() なし」と言って何を意味するのか正確にはわかりませんが、それは関係ありません。ここでは、両方のウィンドウが開いていると仮定します (どのように達成したかは関係ありません)。それ)。
特にテキストボックスなどの実装の詳細ではなく、2 つのフォーム間の多くの結合を避けたいと考えています。2 つのフォーム間のデータの「送信」を操作してトリガーするdelegates
ことができます。events
次に、イベント データを簡単に渡すことができます。サブスクライブした他のフォーム (または実際には他のオブジェクト) は、フォームの正確な実装の詳細を認識せず、デリゲート (イベント) を介して受け取るデータのみを認識します。すべてのコードをここに掲載するつもりはありません。これは、次の URL で既に適切に説明されているためです。