C#에서 Usercontrol의 속성에 액세스하는 방법
-
03-07-2019 - |
문제
하나의 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;
}
}