2010-12-15 4 views
1

RichTextBox을 기반으로하는 투명한 맞춤 컨트롤을 사용하고 있습니다. 일반 TextBox 컨트롤 에서처럼 암호 문자 지원을 사용할 수있는 방법이 있습니까?RichTextBox의 비밀번호 char

+4

* 왜 * 'RichTextBox'에 비밀번호를 입력 하시겠습니까? 당신이 그 일에 대해 잘못된 통제를 사용하고있는 것처럼 들립니다. 암호를 입력하기 위해 명시 적으로 * 설계되지 않은 * 것이므로 보안 상 위험 할 수 있습니다. –

+0

이것은 응용 프로그램이 그라디언트 배경으로 텍스트 편집 제어 기능을 갖기위한 사용자 인터페이스 디자인 요구 사항의 일부입니다. 보안은 문제가되지 않으며,이 애플리케이션의 보안 요구 사항은 매우 제한적입니다. – user976535

+1

이것은 WinForms 또는 WPF 응용 프로그램입니까? "사용자 인터페이스 디자인 요구 사항"이 WPF로 작성된 앱에 대해 비명을 지르는 모든 종류의 실제 기능보다 우선합니다. –

답변

5

간단하기 때문에 RTB는 실제로 비밀번호를 입력하도록 지원합니다. .NET 래퍼에서는 노출되지 않습니다. 프로젝트에 새 클래스를 추가하고 아래 표시된 코드를 붙여 넣습니다. 엮다. 새 컨트롤을 도구 상자의 위쪽에서 폼으로 끌어다 놓습니다.

using System; 
using System.Windows.Forms; 

class RichPassword : RichTextBox { 
    protected override CreateParams CreateParams { 
     get { 
      // Turn on ES_PASSWORD 
      var cp = base.CreateParams; 
      cp.Style |= 0x20; 
      return cp; 
     } 
    } 
} 
0

예, 방법이 있습니다. 미리 그리기 (PreviewKeyDown 또는 유사한 이벤트 찾기)하기 전에 키 누르기를 가로 채어 별표 (*)로 변경해야합니다. 그러나 실제 chars 문자열을 관리하는 논리를 구현해야합니다.

참고 코디 그레이의 의견에 동의합니다.

+1

표준 Win32'TextBox' 컨트롤은 단순히 문자를 별표/글 머리 기호로 표시하는 것보다 암호를 저장하도록 설정된 경우 * lot * more를 수행합니다. 예를 들어, 텍스트 상자에서 암호를 복사 할 수 없습니다. 보안 요구 사항이 "제한적"인 경우에도이 모든 것을 직접 수행하여 언덕 위로 바위를 굴리기 시작합니다. –

+0

@Cody - google "비밀번호 공개 자". –

+0

@ 한스 : 트릭 가방에 말할 수없는 것이 있습니다. 당신이 충분히 열심히 노력한다면 대부분의 것들이 * 어느 수준에서 깨질 수 있습니다. 나는 평범한 사용자가 패스워드 공개자를 갖는 것보다 텍스트 상자에서 암호를 복사하여 붙여 넣는 것을 생각할 것입니다. 질문자는 보안 문제가 "제한적"이라고 언급 했으므로 이러한 유형의 소프트웨어에 의존하는 사람들은 제외되지만 Ctrl + C 키보드 단축키를 아는 사람은 제외한다고 생각합니다. –

-1

이것은 저에게 효과적이었습니다.

Public Class RichPassword 
    Inherits RichTextBox 
    Private Const ES_PASSWORD = 32 
    Protected Overrides ReadOnly Property CreateParams As CreateParams 
     Get 
      Dim CP = MyBase.CreateParams 
      CP.Style = CP.Style Or 32 
      Return CP 
     End Get 
    End Property 
End Class