c# - 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);
}
我单击单选按钮
期望的输出: 随机字符串(这有效)
我再次单击相同的单选按钮
期望的输出: 随机字符串,但与第一个不同(不起作用)
解决方案
您可以同时处理 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);
}
推荐阅读
- oracle - Oracle 12.2 动态分区未分区表
- android - 通过 WebView 的两个 URL
- python - 查找两个列表的对应元素之间的差异索引
- swiftui - 是否有 SwiftUI 制作文本上标或下标的方法?
- .net-core - IdentityServer4 + Blazor
- python - 尝试在 python 文件中提取 JSON 数据时,在 django 代码中显示 FileNotFoundError
- java - 如何使用 kafka 流加入主题
- javascript - 如何为元素设置动画以跟随 div 内的鼠标移动?
- python - 无法运行 mvn (Maven) 命令,因为目录中没有 pom.xml,但 pom.xml 没有出现在搜索中?
- javascript - 使用 Javascript 检测用户国家,并显示新的 div