과거에는 .NET Winforms 컨트롤을 사용하여 특정 기능을 제공하기 위해 합성 사용자 정의 컨트롤을 만드는 것이 좋았습니다. 그것들이 너무 많지 않은 한 꽤 효과적입니다. 어떤 경우는 느려지 기 시작합니다.
당신의 경우, 이것은 내 머리 꼭대기에서 떨어져 있지만, 자동 완성 기능을 지원하는 FlowLayoutPanel, Button 및 Textbox를 사용하여 이들을 조합하여 제공 할 수있는 컨트롤을 만들 수 있습니다 당신이 찾고있는 기능.
컨트롤 (예 : 목록 < 문자열 >)에서 선택된 주소가없는 경우 컨테이너 (FlowLayoutPanel)는 TextBox 만 표시합니다. 사용자가 항목을 선택하면 컨트롤은 적절한 캡션이있는 Button을 자동으로 만들고 FlowLayoutPanel의 왼쪽에 삽입합니다. 사용자가 이미 선택한 주소를 제거하면 FlowLayoutPanel에서 표현 (버튼)을 제거하기 만하면 TextBox의 크기가 적절하게 조정됩니다. 나머지 공간을 채우기 위해 TextBox를 가져 오는 데 문제가있을 수 있지만 (생각하는 방법은 기억이 안납니다), 아이디어를 얻습니다. 컨테이너는 FlowLayoutPanel 일 필요는 없습니다. Docked 컨트롤이있는 Panel을 사용하거나 TableLayoutPanel을 사용하여 컨테이너를 사용할 수도 있습니다.
설명 된 디자인으로 사용자는 버튼을 클릭하여 주소를 삭제할 수 있습니다. 그러나 다른 시각적 인 단서가 없으면 매우 직관적이지 않거나 사용자에게 친숙하지 않기 때문에 "Button"을 작은 삭제 단추 (X)와 함께 "prettied-up"레이블이 포함 된 또 다른 복합 컨트롤로 만드는 것을 고려할 것입니다. 오른쪽으로. 이를 위해 Panel 컨트롤을 사용하고 X 버튼을 오른쪽으로 도킹하고 왼쪽의 Label을 채울 수 있습니다. 텍스트를 제어하고 삭제 기능에 대한 이벤트 핸들러 또는 콜백을 제공하는 데 필요한 경우 공개 속성을 여기에 제공해야합니다.
시각적 인 작업이 완료되면 주 제어에 적절한 속성 및 메서드를 제공하여 필요에 따라 외부 코드와 상호 작용할 수 있습니다.
이 스레드는 관련있는 것으로 보입니다. http://stackoverflow.com/questions/641464/net-control-like-outlooks-e-mail-address-text-control –
즉, Outlook을 시뮬레이션하려고합니다. "받는 사람 :"텍스트 상자. – serhio