2010-06-16 4 views
3

저는 전자 메일과 같은 은유를 통해 시스템의 한 명 이상의 기존 사용자와 통신 할 수있는 C# 클라이언트 응용 프로그램을 작성하고 있습니다. 알려진 전자 메일 주소에서 자동 완성되는 텍스트 입력 상자를 사용자에게 제시하고 여러 구분 기호로 구분 된 주소를 입력 할 수 있습니다. 전자 메일 주소가 입력되고 인식되면 구조화 된 컨트롤로 전환하는 것이 이상적입니다. 기본적으로 Facebook의 모델 이후에 사용자를 추가하기위한 UI 상호 작용을 모델링합니다.Windows Forms 전자 메일 인식 텍스트 상자를 만드는 방법은 무엇입니까?

이와 비슷한 기능을 제공하는 Windows Forms 컨트롤이 있습니까? 하이브리드 텍스트 상자/컨트롤 목록 상자 (아니오, ComboBox 아님) 또는 검색해야하는 항목에 대해 잘 정의 된 용어가 있습니까?

감사로

-Patrick

+1

이 스레드는 관련있는 것으로 보입니다. http://stackoverflow.com/questions/641464/net-control-like-outlooks-e-mail-address-text-control –

+2

즉, Outlook을 시뮬레이션하려고합니다. "받는 사람 :"텍스트 상자. – serhio

답변

1

과거에는 .NET Winforms 컨트롤을 사용하여 특정 기능을 제공하기 위해 합성 사용자 정의 컨트롤을 만드는 것이 좋았습니다. 그것들이 너무 많지 않은 한 꽤 효과적입니다. 어떤 경우는 느려지 기 시작합니다.

당신의 경우, 이것은 내 머리 꼭대기에서 떨어져 있지만, 자동 완성 기능을 지원하는 FlowLayoutPanel, Button 및 Textbox를 사용하여 이들을 조합하여 제공 할 수있는 컨트롤을 만들 수 있습니다 당신이 찾고있는 기능.

컨트롤 (예 : 목록 < 문자열 >)에서 선택된 주소가없는 경우 컨테이너 (FlowLayoutPanel)는 TextBox 만 표시합니다. 사용자가 항목을 선택하면 컨트롤은 적절한 캡션이있는 Button을 자동으로 만들고 FlowLayoutPanel의 왼쪽에 삽입합니다. 사용자가 이미 선택한 주소를 제거하면 FlowLayoutPanel에서 표현 (버튼)을 제거하기 만하면 TextBox의 크기가 적절하게 조정됩니다. 나머지 공간을 채우기 위해 TextBox를 가져 오는 데 문제가있을 수 있지만 (생각하는 방법은 기억이 안납니다), 아이디어를 얻습니다. 컨테이너는 FlowLayoutPanel 일 필요는 없습니다. Docked 컨트롤이있는 Panel을 사용하거나 TableLayoutPanel을 사용하여 컨테이너를 사용할 수도 있습니다.

설명 된 디자인으로 사용자는 버튼을 클릭하여 주소를 삭제할 수 있습니다. 그러나 다른 시각적 인 단서가 없으면 매우 직관적이지 않거나 사용자에게 친숙하지 않기 때문에 "Button"을 작은 삭제 단추 (X)와 함께 "prettied-up"레이블이 포함 된 또 다른 복합 컨트롤로 만드는 것을 고려할 것입니다. 오른쪽으로. 이를 위해 Panel 컨트롤을 사용하고 X 버튼을 오른쪽으로 도킹하고 왼쪽의 Label을 채울 수 있습니다. 텍스트를 제어하고 삭제 기능에 대한 이벤트 핸들러 또는 콜백을 제공하는 데 필요한 경우 공개 속성을 여기에 제공해야합니다.

시각적 인 작업이 완료되면 주 제어에 적절한 속성 및 메서드를 제공하여 필요에 따라 외부 코드와 상호 작용할 수 있습니다.

0

간단한, "가난한 사람의"구현 자동 완성 살펴 * TextBox 컨트롤의 속성을 걸릴 수 있습니다. 알려진 주소로 AutoCompleteSource를 동적으로 채울 수 있으며, 항목이 일치하면 선택한 목록 스타일의 별도 컨트롤에 항목을 추가하십시오.

질문과 관련된 흥미로운 코드 조각 및 제안 된 해결 방법은 this SO article을 참조하십시오.

내장 된 AUtoComplete 속성 이외에도 도구 공급 업체에서 타사 컨트롤을 구입해야하는 경우가있을 것입니다.

+0

AutoComplete 등의 문제는 내가 알 수있는 한, 단일 문자열을 완성한다는 것입니다. 나는 사용자가 "[email protected], [email protected]"과 같은 것을 입력하고 그것을 메일 클라이언트 나 페이스 북에서 기대하는 것처럼 두 개의 클릭 가능한 항목이있는 textbox-ish 항목으로 바꿀 수있게하고 싶다. –

0

이전에 WinForms에서 본 적이 없었습니다. WPF에서는 또 다른 문제가 있습니다. 사용 가능하다면 대신 WinForms 응용 프로그램 내에서 WPF 컨트롤을 호스팅하는 것이 좋습니다. (폴더를 잘라 정도로 쉬워야한다 WPF AutoComplete Folder TextBox : AutoComplete TextBox

그리고 당신은 코멘트에 WPF를 언급하기 때문에, 당신은 또한이 기사를 가지고 :

+0

WPF에서이 작업을 수행하는 방법에 대한 지침이 있습니까? –

+0

저는 실제로 직접 해본 적이 없지만 WPF 컨트롤을 호스팅 할 VS에서 표준으로 WinForms 용 호스팅 WPF 컨트롤이 있습니다. 빠른 Google/Bing이 좋은 결과를 줄 것이라고 확신합니다. –

0

난 당신이 CodeProject의 기사와 비슷한 뭔가를하려는 생각 내가 생각했던 기사의 조금).

0

글쎄, 그런 통제가 없다. 내가 너라면, 그 일을하기 위해 2 개의 텍스트 상자를 만들거야. 목록에서 자동 완성을 위해 일반 텍스트 상자를 동적으로 구성 할 수도 있습니다. 그러나 한 번에 하나의 항목 만 허용합니다.

그래서 자동 완성과 주소 용으로 하나의 텍스트 상자를 사용하시기 바랍니다. 따라서 첫 번째 입력란에 정규화 된 이메일 주소가있을 때마다 입력을 클릭하면 주소가 입력란에 추가되고 구분선이 자동으로 추가됩니다.

그런 다음 주소 텍스트 상자의 주소를 문자 대신 개체로 처리해야합니다. 사용자가 주소의 문자를 삭제하려고 할 때 전체 주소가 삭제되는 방식으로 코드를 작성하십시오.

이것은 내가 생각할 수있는 대안입니다. 코드를 사용하면 도움이됩니다.

관련 문제