2011-05-16 3 views
0

내 최종 프로젝트의 경우 암호를 생성하는 암호 생성기를 만들고 로컬 압축 DB (.sdf)에 저장할지 여부를 선택할 수 있습니다. . 지금 GUI에서 작업하고 있습니다. 암호 용 강도 표시 줄을 만들었지 만 문제는 처음에는 슬라이더를 움직이지 않고 강도 표시 줄을 업데이트 할 수없는 것입니다. 내가 말하는 것에 대한 예를 보여 드리겠습니다. 코드 또는 액션 이벤트로이 작업을 수행 할 수 있는지 궁금합니다. 네 생각은 어떤지 말해봐. 아래는 GUI 디자이너를위한 코드입니다. 이것이 좋은 생각이거나 더 좋은 방법이있을 것이라고 생각합니까? 초점 아이디어는 창에 초점이있는 경우 옵션을 계속 확인하고 변경 사항이 있는지 확인합니다. 비디오 : 음 http://youtu.be/ihSeKbsL55Mfocus-Password Generator 창을 확인하십시오 C#

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

정말로 묻고있는 것을 명확히 할 수 있습니까? 당신은 "그러나 문제는 슬라이더를 먼저 움직이지 않으면 강도 막대를 업데이트 할 수 없다는 것입니다." 그러나 강도를 업데이트하는 코드가 Slider의 Scroll 이벤트 안에 있기 때문에 그것이 업데이트 될 때가 된 것 같습니다. ?? – Tim

+0

Daniel은 실제로 내가 찾고있는 것과 정확히 일치했습니다. 나는 그것들을 다른 기능들에 넣어야 만한다. – seandidk

답변

2

, 그것은 당신이 실제로 여기 요구하는지 이해하는 것은 매우 어렵다하지만 ProgressBar의이 업데이트되지 않는 이유는 슬라이더를 이동하지 않는 한 당신이 실제로 업데이트 할 얘기하지 않을 것입니다.

"lengthSlider"구성 요소의 슬라이드 이벤트에서 암호가 "괜찮음, 약함 또는 정상"인지 여부를 확인하는 방법에 유의하십시오. 그러나 그 코드에서 아무데도 ProgressBar의 값을 설정합니까 - 암호 생성 버튼이라고 가정하는 "bgen_Click"이벤트에서 수행되는 것처럼 보입니까?

개별 컨트롤을 조작 할 때 GUI를 업데이트하려면 적절한 코드를 호출해야합니다. 나는 모든 논리를 의미있는 함수에 넣고 필요할 때 호출 할 것을 제안합니다.

개인적으로 나는이 라인을 따라 뭔가있을 것 :

  • GetPasswordStrengthString를(); - "strLabel"레이블에 적절한 문자열을 반환하기 위해 기호와 숫자 checkbox.checked와 길이를 확인하십시오.

  • CalculateStrengthBarLength(); - ProgressBar의 길이를 결정하는 모든 논리

다음에이 값을 적용하려면 원하는 위치에 호출해야합니다. 예를 들어, 기호 및 숫자 확인란의 CheckedChanged 이벤트에서 해당 변경 사항이 ProgressBar에 반영되는지 확인하고자 할 때 확인란을 선택합니다.