他のクラスでは、新しいフォームではなく、ボタンがクリックされた(そして既存のテキストボックスがある)フォームへの参照が必要です。
インスタンス化するこの新しいフォームは、ボタンをクリックした画面で表示しているものではありません。
(イベントハンドラーがForm1クラス内に存在し、必要に応じて他のクラスのメソッドに情報を「転送」すると仮定しますか?そうでない場合は...そうする必要があります!)
sender
ボタン参照は、オブジェクトを介して取得できevent args
、イベントハンドラーに渡されます。キーワードを他のクラスのメソッドに渡すことで、現在のForm1
インスタンスへの参照を渡すことができます。this
または、sender
ifが役立つ場合は渡すか、特定のテキストボックスへの明示的な参照を他のメソッドに渡すことができます。
たとえば、フォームへの参照を他のメソッドに渡すには、次のようにします。
// Event handler on your form
private void button1_Click(object sender, EventArgs e)
{
ButtonWasPressedOnForm(this);
}
// Other method in your other class
public void ButtonWasPressedOnForm(Form formWhereButtonPressed)
{
// To act on the text box directly:
TextBox textBoxToUpdate = (TextBox)formWhereButtonPressed.Controls.Find("textBox1");
textBoxToUpdate.Text = "whatever";
// Or, using the Form1.txtBox1 property.
formWhereButtonPressed.txtBox1 = "whatever";
}
たとえば、明示的なテキストボックスへの参照を他のメソッドに渡すには:
// Event handler on your form
private void button1_Click(object sender, EventArgs e)
{
ButtonWasPressedOnForm(textBox1);
}
// Other method in your other class
public void ButtonWasPressedOnForm(TextBox textBoxToUpdate)
{
textBoxToUpdate.Text = "whatever";
}
たとえば、イベントオブジェクトを他のメソッドに渡すには:
// Event handler on your form
private void button1_Click(object sender, EventArgs e)
{
Button clickedButton = (Button)sender;
ButtonWasPressedOnForm(clickedButton);
}
// Other method in your other class
public void ButtonWasPressedOnForm(Button clickedButton)
{
Form theParentForm = clickedButton.FindForm();
// To act on the text box directly:
TextBox textBoxToUpdate = (TextBox)theParentForm.Controls.Find("textBox1");
textBoxToUpdate.Text = "whatever";
// Or, To act on the text box, via the form's property:
theParentForm.txtBox1 = "whatever";
}
また、このコードが実行されるように、「他のメソッド」にブレークポイントを設定します。そうでない場合は、イベントハンドラーに戻り、それが発生していることを確認します。そうでない場合は、イベントのワイヤアップを確認してください。
すべての場合において、更新するコントロールの保護レベルに注意する必要がありますが、フォームと他のクラスとの関係に応じて、パブリック、内部、または保護する必要があります。Form1
クラス外から更新したい。
より良いオブジェクト指向アプローチは、Form1
他のクラスがForm1
それらのコントロールを更新するように指示できるようにするメソッドを持つことです(例えばupdateTextBox(string newText)
)。OOのベストプラクティスではないため、外部オブジェクトがクラスのメンバーに直接作用することを許可します(これには、クラスの内部構造の知識が必要です...これは、既存のインターフェイスを壊すことなく実装を変更できるようにカプセル化する必要があります)あなたのクラスと外の世界の間)。
編集:
実際、質問を読み直すと、get/setプロパティを使用してテキストボックスを既にカプセル化しています。良い。したがって、フォームへの参照を他のメソッドに渡してから、プロパティを介してフォームのテキストを更新する必要があります。上記の例にこのメソッドを追加しました。