문제

하나의 TextBox와 하나의 RichTextBox로 C# USERCONTROL을 만들었습니다.

UserControl 외부에서 RichTextBox의 속성에 어떻게 액세스 할 수 있습니까?

예를 들어 .. 양식에 넣으면 RichTextBox의 텍스트 propertie를 어떻게 사용할 수 있습니까 ???

감사해요

도움이 되었습니까?

해결책

가장 깨끗한 방법은 원하는 속성을 UserControl의 속성으로 노출시키는 것입니다.

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


  //...
}

이러한 방식으로 노출하려는 속성과 읽기/쓰기 또는 읽기 전용 여부를 제어 할 수 있습니다. (물론 의미에 따라 속성에 더 나은 이름을 사용해야합니다).

이 접근법의 또 다른 장점은 사용자 컨트롤의 내부 구현을 숨긴다는 것입니다. RichText 컨트롤을 다른 컨트롤과 교환하고 싶다면 컨트롤의 발신자/사용자를 깨지 않을 것입니다.

다른 팁

속성 그리드의 RichTextBox의 Access Modifier ( "Modifiers")를 공개로 변경하십시오.

이와 같이 Usercontrol에 속성을 추가하십시오

public string TextBoxText
{
    get
    {
        return textBox1.Text;
    }
    set
    {
        textBox1.Text = value;
    }
}

최근에 사용자 정의 클래스 에서이 문제를 해결하는 데 몇 가지 문제가있었습니다.

사용자 컨트롤에는 커스텀 클래스 유형 인 공공 자산이있었습니다. 디자이너는 기본적으로 일부 값을 할당하려고 시도하므로 디자이너 코드에서 라인 userControlThing.CustomClassProperty = null 자동으로 추가되었습니다.

의도는 프로그램을 실행하는 동안 어느 시점에서 사용자 컨트롤에 사용자 정의 클래스를 제공 할 수 있어야했습니다 (사용자가 보이는 값을 변경하기 위해). 때문에 set {} 부분은 널 값을 확인하지 않았으며 다양한 오류가 발생했습니다.

해결책은 속성을 개인으로 변경하고 두 가지 공개 방법을 사용하여 값을 설정하고 얻는 것이 었습니다. 디자이너는 속성을 자동 할당하려고하지만 방법을 혼자서 남겨 둡니다.

RichTextBox의 공공 재산을 만들거나 RichTextBox 텍스트를 설정하는 작업을 수행하는 다른 속성을 노출해야합니다.

private RichTextBox rtb;

public string RichTextBoxText
{
    get
    {
        return rtb.Text;
    }
    set
    {
        rtb.Text = value;
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top