DataGridViewのセルに入力された文字をマスクしたい への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 鍵  (社会人)
投稿日時
2009/1/4 01:48:38
魔界の仮面弁士さん、ありがとうございます。
説明不足ですみませんでした。
DataGridViewでいくつかのパスワードを並べて表示したかったのですが、
その際にそのまま表示する場合と、全て"*"で表示する場合を
切り替えたかったのですが、方法が分かりませんでした。
教えていただいたコードを参考に、解決することができました。
ありがとうございました。
説明不足ですみませんでした。
DataGridViewでいくつかのパスワードを並べて表示したかったのですが、
その際にそのまま表示する場合と、全て"*"で表示する場合を
切り替えたかったのですが、方法が分かりませんでした。
教えていただいたコードを参考に、解決することができました。
ありがとうございました。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2009/1/3 20:38:47
その「マスク」の目的にもよるかと思います。
マスク エディット コントロールを使いたい、という意図であれば、
http://dobon.net/vb/dotnet/datagridview/maskedtextboxcolumn.html
のようにすることができます。
パスワード入力を目的としているのであれば、こんな感じで如何でしょう。
(この場合、そもそも「***」なパスワードを画面に表示させておく必要があるのか微妙ですが…)
マスク エディット コントロールを使いたい、という意図であれば、
http://dobon.net/vb/dotnet/datagridview/maskedtextboxcolumn.html
のようにすることができます。
パスワード入力を目的としているのであれば、こんな感じで如何でしょう。
(この場合、そもそも「***」なパスワードを画面に表示させておく必要があるのか微妙ですが…)
Imports System.Windows.Forms
Imports System.Drawing
Public Class Form1
Private WithEvents dgv As New DataGridView()
''' <summary>パスワード表示するセル座標なら True を返す</summary>
Private Function IsPasswordCell(ByVal row As Integer, ByVal column As Integer) As Boolean
'この部分は、実際の判定条件に応じて変更してください。
Return column = 1
End Function
''' <summary>パスワード表示するセル座標なら True を返す</summary>
Private Function IsPasswordCell(ByVal address As Point) As Boolean
Return IsPasswordCell(address.Y, address.X)
End Function
Private Sub Form1_Load() Handles Me.Load
dgv.Dock = DockStyle.Fill
Controls.Add(dgv)
dgv.AllowUserToAddRows = False
dgv.ColumnCount = 5
dgv.RowCount = 20
dgv.EditMode = DataGridViewEditMode.EditOnEnter
End Sub
Private Sub dgv_EditingControlShowing(ByVal sender As Object, ByVal e _
As DataGridViewEditingControlShowingEventArgs) Handles dgv.EditingControlShowing
Dim t As TextBox = TryCast(e.Control, TextBox)
If t IsNot Nothing Then
'入力時のパスワード隠し
t.UseSystemPasswordChar = IsPasswordCell(dgv.CurrentCellAddress)
End If
End Sub
Private Sub dgv_CellFormatting(ByVal sender As Object, ByVal e As _
DataGridViewCellFormattingEventArgs) Handles dgv.CellFormatting
If IsPasswordCell(e.RowIndex, e.ColumnIndex) Then
'表示時のパスワード隠し
e.Value = StrDup(Len(e.Value), "*"c)
End If
End Sub
'Private Sub dgv_CellEnter(ByVal sender As DataGridView, ByVal e As DataGridViewCellEventArgs) Handles dgv.CellEnter
' Text = CStr(sender(e.ColumnIndex, e.RowIndex).Value)
'End Sub
End Class
投稿者 鍵  (社会人)
投稿日時
2009/1/2 01:45:36
こんにちは。
いつもお世話になっております。
VB2008を使用しています。
早速ですが、題名の通り
DataGridViewのセルに入力された文字を
マスクしたいと考えています。
Replaceメソッド等で表示されている文字を
"*"に置換して表示する方法を思いついたのですが、
編集する際などの処理が複雑になりそうなので
できれば置換したくありません。
何かいい方法があればご教授願いたいと思います。
よろしくお願いいたします。
いつもお世話になっております。
VB2008を使用しています。
早速ですが、題名の通り
DataGridViewのセルに入力された文字を
マスクしたいと考えています。
Replaceメソッド等で表示されている文字を
"*"に置換して表示する方法を思いついたのですが、
編集する際などの処理が複雑になりそうなので
できれば置換したくありません。
何かいい方法があればご教授願いたいと思います。
よろしくお願いいたします。
手入力でマスクされている文字を1文字だけ削除して別のセルへ移動すると、
元々入力していた文字が*に変わってしまいます。。
スマートな回避方法はないものかと思い、投稿してみました。