1

リストビュー コントロールの特定の列にあるテキストをパスワード文字に変換する方法はありますか? ありがとうございました。

4

4 に答える 4

4

ObjectListView(.NET WinForms ListViewのオープンソースラッパー)を使用します。これにより、ListViewに関するほとんどすべての問題が大幅に軽減され、場合によっては楽しいこともあります。

この場合、AspectToStringConverterデリゲートを使用します。デリゲートは、値をListViewに表示する文字列に変換する役割を果たします。

this.olv1.passwordColumn.AspectToStringConverter = delegate(object value) {
    string password = (string)value;
    if (String.IsNullOrEmpty(password))
        return String.Empty;
    else
        return new String('*', password.Length);
}
于 2009-10-22T08:03:33.497 に答える
3

実際のデータ (この場合はパスワード) を ListViewItem の Tag プロパティに格納します。次に、テキストフィールドに好きなものを入力できます。このパターンは、一般に、オブジェクトを他のタイプのリスト/グリッド コントロールの項目に関連付ける場合にうまく機能します。

String password = "MyPassword";
ListViewItem lvi = new ListViewItem("********");
lvi.Tag = password;

listView.Items.Add(lvi);
于 2009-10-21T21:41:16.397 に答える
0

Windows ではサポートされていませんが、「パスワード文字」と呼ばれるものは、実際には Unicode 文字であるため、独自のシステムを構築できます。ListView を継承し、プライベート フィールドに実際のテキストを保持し、セルのテキストをそれらのドットに置き換えます。

ListView と ListViewItem の構造全体、またはそれが何であるかを正確に覚えているわけではありませんが、おそらく、少なくとも ListView を継承し、おそらく ListViewItem も継承して、多くのオーバーライドと非表示を行う必要があります。

自力でなんとかなると思います。そうでない場合は、質問を編集してください:)

于 2009-10-21T21:22:50.500 に答える
0

出力フィールドの場合は、フィールドに入力するときに「*」に変更するだけです。ユーザーが入力している場合は、keydown イベントにアタッチして、そこで置換する必要があります。

実際のパスワードを使用する場合は、マップとして機能する他のフィールド (ユーザー名、ユーザー ID など) を少なくとも 1 つ特定して、フィールドの実際の値を把握する必要があります。Hashtable オブジェクトを使用してそれを行うことができます。

于 2009-10-21T21:56:16.087 に答える