C# 检查焦点密码生成器C的窗口#
对于我的年终项目,我正在创建一个密码生成器,您可以在其中生成密码,然后您可以选择是否要将其存储在本地压缩数据库(.sdf)中。我现在正在开发GUI。我正在为密码创建一个强度条,但问题是,如果不先移动滑块,我似乎无法让它更新强度条。让我给你们展示一下我所说的例子。我想知道我是否可以用代码或动作事件来实现这一点。告诉我你的想法。下面是GUI设计器的一些代码。你认为这是个好主意还是有更好的办法?焦点的想法来自于如果窗口有焦点,它将继续检查选项,看看是否有任何变化。视频:C# 检查焦点密码生成器C的窗口#,c#,.net,windows,C#,.net,Windows,对于我的年终项目,我正在创建一个密码生成器,您可以在其中生成密码,然后您可以选择是否要将其存储在本地压缩数据库(.sdf)中。我现在正在开发GUI。我正在为密码创建一个强度条,但问题是,如果不先移动滑块,我似乎无法让它更新强度条。让我给你们展示一下我所说的例子。我想知道我是否可以用代码或动作事件来实现这一点。告诉我你的想法。下面是GUI设计器的一些代码。你认为这是个好主意还是有更好的办法?焦点的想法来自于如果窗口有焦点,它将继续检查选项,看看是否有任何变化。视频: 名称空间密码生成器 { 公共部
名称空间密码生成器
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有无效文件工具条带菜单项单击(对象发送方,事件参数e)
{
}
私有void quitToolStripMenuItem\u单击(对象发送者,事件参数e)
{
这个。关闭();
}
私有void quitToolStripMenuItem1\u单击(对象发送方,事件参数e)
{
这个。关闭();
}
私有void b复制\u单击(对象发送方,事件参数e)
{
if(passwordGenBox.Text.Length!=0)
{
Clipboard.SetText(passwordGenBox.Text);
}
其他的
{
MessageBox.Show(“未生成密码”,“复制错误”,
MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
私有void b清除单击(对象发送者,事件参数e)
{
passwordGenBox.Text=“”;
}
私有void lengthSlider_滚动条(对象发送方,事件参数e)
{
sliderLength.Text=lengthSlider.Value.ToString();
int str=长度滑块.Value;
bool scheck=symCheck.Checked;
bool ncheck=数字检查。已检查;
//1-10无符号或数字
如果(str>0&&str 0&&str 0&&str 0&&str那么,很难理解您在这里实际提出的问题,但是您的进度条没有更新的原因是,除非您移动滑块,否则您实际上没有告诉它更新
请注意,在“lengthSlider”组件的幻灯片事件中,密码是否为“OK、weak或okay”的逻辑是如何设置的。但是,在该代码中,您没有设置ProgressBar的值-这似乎是在“bgen_Click”事件中完成的,我假设该事件是生成密码按钮
为了在操作单个控件时更新GUI,您需要调用适当的代码。我建议您将所有逻辑放入有意义的函数中,并根据需要调用它们
就我个人而言,我有以下几点:
- GetPasswordStrengthString();-选中符号和数字复选框。选中该复选框和长度可为“strLabel”标签返回适当的字符串
- CalculateStrengthBarLength();-确定ProgressBar长度的所有逻辑
然后,这些将在您希望它们生效的任何地方被调用。例如,在符号和数字复选框的CheckedChanged事件中,您希望看到它在进度栏中反映出来。您能澄清您真正的问题吗?您说“但问题是,我似乎无法让它在不移动滑块的情况下更新强度条。“但是,由于您更新强度的代码在滑块的滚动事件中,这似乎是有意义的,它将在该时间更新。?Daniel实际上回答了我所要的。我应该将它们放在不同的函数中。
namespace PasswordGenerator
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void fileToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void quitToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
private void quitToolStripMenuItem1_Click(object sender, EventArgs e)
{
this.Close();
}
private void bcopy_Click(object sender, EventArgs e)
{
if (passwordGenBox.Text.Length != 0)
{
Clipboard.SetText(passwordGenBox.Text);
}
else
{
MessageBox.Show("No Password Generated.", "Copy Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void bclear_Click(object sender, EventArgs e)
{
passwordGenBox.Text = "";
}
private void lengthSlider_Scroll(object sender, EventArgs e)
{
sliderLength.Text = lengthSlider.Value.ToString();
int str = lengthSlider.Value;
bool scheck = symCheck.Checked;
bool ncheck = numbersCheck.Checked;
//1-10 no symbols or numbers
if (str > 0 && str <= 10)
{
strLabel.Text = "Week";
}
//1-10 symbols no numbers
if (str > 0 && str <= 10 && scheck == true && ncheck == false)
{
strLabel.Text = "Alright";
}
//1-10 no symbols but numbers
if (str > 0 && str <= 10 && scheck == false && ncheck == true)
{
strLabel.Text = "Week";
}
//1-10 symbols & numbers
if (str > 0 && str <= 10 && scheck == true && ncheck == true)
{
strLabel.Text = "Okay";
}
}
private void bgen_Click(object sender, EventArgs e)
{
int pwlength = lengthSlider.Value;
bool symbols = false;
bool numbers = false;
if (symCheck.Checked && numbersCheck.Checked)
{
symbols = true;
numbers = true;
}
else if (symCheck.Checked && numbersCheck.Checked == false)
{
symbols = true;
numbers = false;
}
else if (symCheck.Checked == false && numbersCheck.Checked)
{
symbols = false;
numbers = true;
}
else
{
symbols = false;
numbers = false;
}
Generator gen = new Generator(pwlength, symbols, numbers);
}
}
}