この質問にはすでに答えがあります。
私のアプリケーションでは、ボタンの可視性を制御し、テキストフィールドとwinformヘッダーテキストを有効にするために、同じコンテキストを異なるコンテキストで実行しています。 私がこれを行うことにした方法は、単純に文字列をフォームコンストラクタに渡して、順番に目的のwinformの調整を含む2、3のifステートメントでそれをチェックすることです。
if (formContext == "add")
{
Text = "Add member";
}
if (formContext == "edit")
{
Text = "Change role";
userTextBox.Enabled = false;
searchButton.Visible = false;
}
これはうまく機能しますが、 "Text"キーワードはReSharperによって次のメッセージが追加された青い斜めの線が表示されます。 これは潜在的な問題なのか、それともある種の過度に熱心なReSharperメッセージなのか。
私の実装の改善のためのどんな明確化や提案も大いに感謝されるでしょう。
基本クラスctor内の仮想メンバー呼び出しできたサブクラスのctorが呼び出される前(したがって、オブジェクトが自身を整合性のある状態に初期化する機会を得る前)に、サブクラスで何らかのロジックを実行させます。
それはちょうどいい思い出ですので、あなたが潜在的にいくつかの厄介な予期せぬ動作を引き起こす可能性がある何かをしているのを知っています。
既存の回答に加えて、フォームにはLoadイベントハンドラを追加できます。
Load += delegate
{
if (formContext == "add")
{
Text = "Add member";
}
if (formContext == "edit")
{
Text = "Change role";
userTextBox.Enabled = false;
searchkButton.Visible = false;
}
};
クラスを封印するだけです。
以下のようにクラスを書き直すことをお勧めします。
public partial class Form1 : Form
{
public enum FormContextMode
{
Add,
Edit
}
private FormContextMode m_mode = FormContextMode.Add;
public Form1( FormContextMode mode )
{
InitializeComponent();
m_mode = mode;
Load += delegate { UpdateForm(); };
}
private void UpdateForm()
{
if( m_mode == FormContextMode.Add )
{
Text = "Add member";
}
else if( m_mode == FormContextMode.Edit )
{
Text = "Change role";
userTextBox.Enabled = false;
searchkButton.Visible = false;
}
}
}