我有这个代码使用“*”完美隐藏密码但我想要禁用此功能如果选中复选框意味着将密码显示为字符串,但我不知道如何以简单的方式。
Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
If (e.ColumnIndex <> -1 AndAlso DataGridView1.Columns(e.ColumnIndex).Name = "password") Then
If (Not e.Value Is Nothing) Then
e.Value = New String("*", e.Value.ToString().Length)
End If
Else
If CheckBox1.Checked = True Then
End If
End If
End Sub
答案 0 :(得分:1)
起初我认为如果DataGridView未绑定,实际的调用值将被您的行替换
e.Value = New String("*", e.Value.ToString().Length)
但事实并非如此。您似乎缺少的是CheckBox上的事件处理程序,以强制DataGridView刷新,如下所示:
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
DataGridView1.Refresh();
End Sub
另外,当选中复选框时,您实际上不需要执行任何操作,因此您的cellformatting处理程序可能如下所示:
Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
If (e.ColumnIndex <> -1 AndAlso DataGridView1.Columns(e.ColumnIndex).Name = "password") Then
If (Not e.Value Is Nothing And Not CheckBox1.Checked) Then
e.Value = New String("*", e.Value.ToString().Length)
End If
End If
End Sub
但是现在使用checked事件处理程序,DataGridView将被强制重新格式化。
干杯
答案 1 :(得分:-1)
我不确定您是否使用XAML,但如果您是,那么您可以使用TemplateSelector。构建两个模板,然后设置一个选择器类,根据您编写的条件决定使用哪个模板。