检查焦点窗口 - 密码生成器C#

时间:2011-05-16 18:56:58

标签: c# .net windows

对于我的年终项目,我创建了一个密码生成器,您可以在其中生成密码,然后您可以选择是否要将其存储在本地压缩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);
        }
    }
}

1 个答案:

答案 0 :(得分:2)

嗯,很难理解你在这里问的是什么,但你的ProgressBar没有更新的原因是除非你移动滑块,否则你实际上并没有告诉它更新。

请注意您对“lengthSlider”组件的Slide事件中的密码是“正常,弱或没有”的所有逻辑。但是,在那段代码中你没有设置ProgressBar的值 - 这似乎是在“bgen_Click”事件上完成的,我假设它是生成密码按钮?

要在操作各个控件时更新GUI,您需要调用相应的代码。我建议你将所有逻辑放入有意义的函数中并根据需要调用它们。

我个人也有这样的话:

  • GetPasswordStrengthString(); - 检查符号和数字checkbox.checked和返回“strLabel”标签的相应字符串的长度。

  • CalculateStrengthBarLength(); - 确定ProgressBar长度的所有逻辑

然后,只要您希望它们生效,就会调用它们。例如,在符号和数字的CheckedChanged事件复选框上,当您发生更改时,您希望看到它反映在ProgressBar中。