1つのテキストボックスと1つのリッチテキストボックスを使用してC#ユーザーコントロールを作成しました。
ユーザーコントロールの外部からリッチテキストボックスのプロパティにアクセスするにはどうすればよいですか。
たとえば、フォームに入力した場合、richtextboxのテキストプロパティをどのように使用できますか?
ありがとう
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 つのパブリック メソッドを使用して値を設定および取得することでした。デザイナーはプロパティの自動割り当てを試みますが、メソッドはそのままにしておきます。
リッチテキストボックスのパブリックプロパティを作成するか、次のようなリッチテキストボックステキストを設定する機能を実行する他のプロパティを公開する必要があります。
private RichTextBox rtb;
public string RichTextBoxText
{
get
{
return rtb.Text;
}
set
{
rtb.Text = value;
}
}