元のコードを見ると、取得している の潜在的な理由が 2 つありNullReferenceException
ます。まず、tb
あなたが提供するコードで定義されていないので、それが何であるかわかりません。
第 2 に、コントロールが見つからない場合、またはではない場合にTextBox textbox = form.Controls["textboxMain"] as TextBox
返すことができます。デフォルトでは、コントロールはアクセサーでマークされているため、メンバーに戻ると思われます。null
TextBox
private
form.Controls[...]
null
private
コントロールを としてマークすると、internal
この問題が解決される可能性がありますが、この状況に対処するための最善の方法ではなく、将来のコーディング習慣の低下につながるだけです。private
コントロールのアクセサーはまったく問題ありません。
フォーム間でデータを共有するより良い方法は、public
プロパティを使用することです。たとえば、TextBox
メイン画面に がusernameTextBox
あり、それを他のフォームに公開したいとします。
public string Username
{
get { return usernameTextBox.Text; }
set { usernameTextBox.Text = value; }
}
次に、コードで行う必要があるのは次のとおりです。
var form = new MainForm();
myTextBox.Text = form.Username; // Get the username TextBox value
form.Username = myTextBox.Text; // Set the username TextBox value
このソリューションの優れた点は、プロパティを介してデータを保存する方法をより適切に制御できることです。アクションget
にset
は、ロジックを含めたり、複数の値を設定したり、検証を実行したり、その他のさまざまな機能を実行したりできます。
WPFを使用している場合は、 MVVMパターンを調べることをお勧めします。オブジェクトの状態で同様のことができるからです。