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;
}
}