C #- ListView 열의 텍스트 변환 암호 문자로 변환
문제
ListView Control의 특정 열에있는 텍스트를 암호 문자로 변환하는 방법이 있습니까? 고맙습니다.
해결책
ListViewItem의 태그 속성에 실제 데이터 (이 경우 비밀번호)를 저장합니다. 그런 다음 원하는 것을 텍스트 필드에 넣을 수 있습니다. 이 패턴은 일반적으로 객체를 다른 유형의 목록/그리드 컨트롤의 항목과 연결하는 데 적합합니다.
String password = "MyPassword";
ListViewItem lvi = new ListViewItem("********");
lvi.Tag = password;
listView.Items.Add(lvi);
다른 팁
an을 사용하십시오 ObjectListView (.NET WinForms ListView 주변의 오픈 소스 래퍼). 그것은 목록보기에 관한 거의 모든 것을 훨씬 덜 고통스럽게 만듭니다. 때로는 재미 있습니다.
이 경우, 당신은 an을 사용합니다 AspectToStringConverter
ListView에 표시하려는 문자열로 값을 변환 할 책임이있는 Delegate :
this.olv1.passwordColumn.AspectToStringConverter = delegate(object value) {
string password = (string)value;
if (String.IsNullOrEmpty(password))
return String.Empty;
else
return new String('*', password.Length);
}
Windows는이를 지원하지 않지만 "암호 문자"라고 부르는 "암호 문자"는 실제로 유니 코드 숯이므로 자체 시스템을 구축 할 수 있습니다. ListView를 상속하는 것과 같은 것은 개인 필드에 실제 텍스트를 유지하고 셀의 텍스트를 그 점으로 바꾸십시오.
나는 ListView와 ListViewItem의 전체 구조를 정확히 기억하지 못하거나 ...이 무엇인지 ...하지만 적어도 ListView를 상속 받고, ListViewItem을 상속하고, 상속하는 많은 재정의 및 숨기기가 필요할 것입니다.
나는 당신이 당신 자신으로 이것을 할 수 있다고 생각합니다. 그렇지 않다면 질문을 편집하십시오 :)
출력 필드 인 경우 필드를 채우면 '*'로 변경됩니다. 사용자가 입력하는 사람이라면 키 다운 이벤트에 첨부하고 대체해야합니다.
실제 비밀번호를 사용하려면 현장의 실제 값이 무엇인지 알 수 있도록 맵 역할을하려면 하나 이상의 다른 필드 (사용자 이름, 사용자 ID 등 ...)를 식별해야합니다. 해시 가능한 물체로 그렇게 할 수 있습니다.