首页 > 解决方案 > C# Forms 单选按钮在选中时单击了多次

问题描述

我的表单中有两个并排的单选按钮,其中一个在单击时会生成一个随机密码,这很好,但是我如何获得它,如果再次单击(虽然已经检查过),它会再次运行代码,这不是我的代码有问题,所以不需要,它更多的是 Visual Studio 的 winforms 单选按钮的问题。提前致谢

private void NAPOCustom_CheckedChanged(object sender, EventArgs e) //Weird radiobutton name i know
        {
            NAPasswordE.Clear(); //text box which generation password goes into
                string validChars = "ABCDEFGHJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*?_-";
            Random random = new Random();
            char[] chars = new char[12];
            for (int i = 0; i < 12; i++)
            {
                chars[i] = validChars[random.Next(0, validChars.Length)];
            }
            NAPasswordE.Text = new string(chars);
        }

我单击单选按钮

期望的输出: 随机字符串(这有效)

我再次单击相同的单选按钮

期望的输出: 随机字符串,但与第一个不同(不起作用)

标签: c#winforms

解决方案


您可以同时处理 Click() 和 CheckChanged() 事件。从技术上讲,它会产生两个密码,但在这种情况下,我认为这并不重要。将您的密码生成代码移到一个单独的方法中,并从两个事件处理程序中调用它。还将您的随机数移至班级级别。

就像是:

private Random random = new Random();

private void NAPOCustom_Click(object sender, EventArgs e)
{
    RandomPassword();
}

private void NAPOCustom_CheckedChanged(object sender, EventArgs e)
{
    if (NAPOCustom.Checked)
    {
        RandomPassword();
    }
}

private void RandomPassword()
{           
    string validChars = "ABCDEFGHJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*?_-";
    char[] password = validChars.ToCharArray().OrderBy(x => random.Next()).Take(12).ToArray();            
    NAPasswordE.Text = new string(password);
}

推荐阅读