Проверьте окно для Фокуса Генератор паролей C # - PullRequest
0 голосов
/ 16 мая 2011

Для моего проекта на конец года я создаю генератор паролей, в котором вы генерируете пароль, затем вы можете выбрать, хотите ли вы сохранить его в локальной компактной БД (.sdf). Я работаю над 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 Ответ

2 голосов
/ 16 мая 2011

Что ж, довольно сложно понять, что вы на самом деле спрашиваете здесь, но причина, по которой ваш ProgressBar не обновляется, заключается в том, что вы фактически не говорите ему об обновлении, пока вы не переместите ползунок.

Обратите вниманиекак у вас есть вся логика для того, чтобы пароль был «хорошо, слабый или нормальный» в событии Slide вашего компонента lengthSlider.Тем не менее, нигде в этом коде вы не устанавливаете значение ProgressBar - что, по-видимому, делается для события "bgen_Click", которое, как я полагаю, является кнопкой создания пароля?

Для обновления графического интерфейса при работеотдельные элементы управления вам нужно вызвать соответствующий код.Я бы посоветовал вам поместить всю свою логику в осмысленные функции и вызывать их по мере необходимости.

Лично у меня будет что-то вроде этого:

  • GetPasswordStrengthString ();- проверьте наличие символов и чисел checkbox.checked и длину для возврата соответствующей строки для метки "strLabel".

  • CalculateStrengthBarLength ();- вся ваша логика для определения длины ProgressBar

Они будут вызываться там, где вы хотите, чтобы они вступили в силу.Например, для события CheckedChanged флажков для символов и чисел, например, когда это меняется, вы хотите, чтобы оно отображалось в ProgressBar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...