对于我的年终项目,我创建了一个密码生成器,您可以在其中生成密码,然后您可以选择是否要将其存储在本地压缩DB(.sdf)中。我目前正在使用GUI。我正在为密码创建一个强度条,但问题是我似乎无法在没有先移动滑块的情况下更新强度条。让我举例说明我在说什么。我想知道我是否可以通过代码或动作事件来做到这一点。告诉我你的想法。下面是GUI设计器的一些代码。你认为这是一个好主意还是会有更好的方法?焦点的想法来自如果窗口有焦点,它将继续检查选项,看看是否有任何变化。视频:http://youtu.be/ihSeKbsL55M
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);
}
}
}
答案 0 :(得分:2)
嗯,很难理解你在这里问的是什么,但你的ProgressBar没有更新的原因是除非你移动滑块,否则你实际上并没有告诉它更新。
请注意您对“lengthSlider”组件的Slide事件中的密码是“正常,弱或没有”的所有逻辑。但是,在那段代码中你没有设置ProgressBar的值 - 这似乎是在“bgen_Click”事件上完成的,我假设它是生成密码按钮?
要在操作各个控件时更新GUI,您需要调用相应的代码。我建议你将所有逻辑放入有意义的函数中并根据需要调用它们。
我个人也有这样的话:
GetPasswordStrengthString(); - 检查符号和数字checkbox.checked和返回“strLabel”标签的相应字符串的长度。
CalculateStrengthBarLength(); - 确定ProgressBar长度的所有逻辑
然后,只要您希望它们生效,就会调用它们。例如,在符号和数字的CheckedChanged事件复选框上,当您发生更改时,您希望看到它反映在ProgressBar中。