C#でユーザーコントロールのプロパティにアクセスする方法
-
03-07-2019 - |
質問
1つのテキストボックスと1つのリッチテキストボックスでC#ユーザーコントロールを作成しました。
ユーザーコントロールの外部からrichtextboxのプロパティにアクセスするにはどうすればよいですか。
たとえば..フォームに入れた場合、リッチテキストボックスのテキストプロパティをどのように使用できますか?
ありがとう
解決
最もクリーンな方法は、目的のプロパティをユーザーコントロールのプロパティとして公開することです。例:
class MyUserControl
{
// expose the Text of the richtext control (read-only)
public string TextOfRichTextBox
{
get { return richTextBox.Text; }
}
// expose the Checked Property of a checkbox (read/write)
public bool CheckBoxProperty
{
get { return checkBox.Checked; }
set { checkBox.Checked = value; }
}
//...
}
この方法で、公開するプロパティと、読み取り/書き込みまたは読み取り専用のプロパティを制御できます。 (もちろん、プロパティの意味に応じて、より適切な名前をプロパティに使用する必要があります。)
このアプローチのもう1つの利点は、ユーザーコントロールの内部実装を隠すことです。リッチテキストコントロールを別のコントロールと交換したい場合、コントロールの呼び出し元/ユーザーを壊すことはありません。
他のヒント
プロパティグリッドのRichTextBoxのアクセス修飾子(" Modifiers")をPublicに変更します。
このようなユーザーコントロールにプロパティを追加します
public string TextBoxText
{
get
{
return textBox1.Text;
}
set
{
textBox1.Text = value;
}
}
最近、カスタムクラスでこれを行う際に問題が発生しました:
ユーザーコントロールには、カスタムクラスタイプのパブリックプロパティがありました。デザイナはデフォルトで値を割り当てようとするため、デザイナコードでは、行 userControlThing.CustomClassProperty = null
が自動的に追加されていました。
目的は、プログラムの実行中にいつでもユーザーコントロールにカスタムクラスを提供できるようにすることです(ユーザーに表示される値を変更するため)。 set {}
部分はnull値をチェックしなかったため、さまざまなエラーが発生しました。
解決策は、プロパティをプライベートプロパティに変更し、2つのパブリックメソッドを使用して値を設定および取得することでした。デザイナーはプロパティの自動割り当てを試みますが、メソッドはそのままにします。
richtextboxのパブリックプロパティを作成するか、次のようなrichtextboxテキストを設定するジョブを実行する他のプロパティを公開する必要があります。
private RichTextBox rtb;
public string RichTextBoxText
{
get
{
return rtb.Text;
}
set
{
rtb.Text = value;
}
}