如何临时取消隐藏 datagridviw 的密码单元格?

问题描述

在我的 datagridview 控件中,我像这样屏蔽了密码列:

private void dataGridView2_CellFormatting(object sender,DataGridViewCellFormattingEventArgs e)
{
  if (dataGridView2.Columns[e.ColumnIndex].HeaderText=="Password" && e.Value != null)
  {
    e.Value = new String('*',e.Value.ToString().Length);
  }

现在我想要做的是如何在特定单元格上单击并按住鼠标按钮并显示该单元格的实际密码,当我松开按钮时让它恢复被屏蔽

有什么建议吗?

谢谢。

解决方法

请看以下内容

TextBox sampletxtbox = e.Control as TextBox;
if (sampletxtbox != null)
{
    sampletxtbox.UseSystemPasswordChar = true;
}

其中 e 来自 EditingControlShowing 事件。处理此事件并将其转换为文本框。

,

试图让它在 DataGridView 中以这种方式工作似乎有点棘手。我不确定 EditingControlShowing 事件是否适合您,但如果可以,您可以将控件转换为 TextBox 并切换 UseSystemPasswordChar,如上面的答案所示。这是我放在一起的一个小功能。您可以创建一个测试项目并将其粘贴并使用它。 `

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        DataGridView gv = new DataGridView();
        Controls.Add(gv);

        var buttonCol = new DataGridViewButtonColumn()
        {
            Name = "colButton",HeaderText = "Show Password",UseColumnTextForButtonValue = true,Text = "Click"
        };
        gv.Columns.Add(buttonCol);

        var textCol = new DataGridViewTextBoxColumn()
        {
            Name = "colPassword",HeaderText = "Password"
        };
        gv.Columns.Add(textCol);

        var hiddenTextCol = new DataGridViewTextBoxColumn()
        {
            Name = "colHiddenPassword",Visible = false
        };
        gv.Columns.Add(hiddenTextCol);

        gv.Rows.Add();
        gv.AllowUserToAddRows = false;
        gv.Rows[0].Cells[1].Value = "********";
        gv.Rows[0].Cells[2].Value = "password";

        gv.CellMouseDown += (s,e) =>
        {
            if (e.ColumnIndex == 0)
                gv.Rows[e.RowIndex].Cells[1].Value = gv.Rows[e.RowIndex].Cells[2].Value;
        };

        gv.CellMouseUp += (s,e) =>
        {
            if (e.ColumnIndex == 0)
                gv.Rows[e.RowIndex].Cells[1].Value = new String('*',gv.Rows[e.RowIndex].Cells[2].Value.ToString().Length);
        };
        gv.CellMouseLeave += (s,gv.Rows[e.RowIndex].Cells[2].Value.ToString().Length);
        };
    }
}

` 在这个例子中,我把一个简单的 DataGridView 放在了一个三列中,第一列是按钮列,第二列是可见密码列,第三列是纯文本隐藏密码列。

DataGridView 处理了三个事件:CellMouseDown、CellMouseUp 和 CellMouseLeave。

CellMouseDown 会将隐藏的密码替换为纯文本密码,而 CellMouseUp 和 CellMouseLeave 将输入“*”字符,直到您最初拥有的纯文本密码的长度。

如果这有帮助,或者您有任何问题或疑虑,请告诉我!