投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/1/3 20:38:47
その「マスク」の目的にもよるかと思います。

マスク エディット コントロールを使いたい、という意図であれば、
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 IntegerByVal column As IntegerAs 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 ObjectByVal 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 ObjectByVal 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