2011-05-16 55 views
0

對於我年底的項目,我創建了一個密碼生成器,您可以在其中生成密碼,然後您可以選擇是否要將其存儲在本地壓縮數據庫(.sdf) 。目前我正在開發GUI。我正在爲密碼創建一個強度條,但問題是,如果沒有先移動滑塊,我似乎無法更新強度條。讓我告訴你我正在談論的事例。我想知道是否可以通過代碼或動作事件來做到這一點。告訴我你的想法。下面是GUI設計器的一些代碼。你認爲這是一個好主意還是會有更好的方法?焦點的想法來自於如果窗口已經關注它將繼續檢查選項並查看是否有任何改變。視頻:http://youtu.be/ihSeKbsL55M檢查窗口焦點 - 密碼生成器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

你能澄清你真的在問什麼嗎?你說過「但問題是,我似乎無法在不先移動滑塊的情況下更新強度欄。」但是由於你的代碼更新的力量是在滑塊的Scroll事件中,這似乎是有道理的,那是什麼時候它會更新。 ?? – Tim 2011-05-16 19:05:35

+0

丹尼爾實際上回答了我正在尋找的東西。我應該把它們放在不同的功能中。 – seandidk 2011-05-16 21:34:50

回答

2

嗯,這是很難理解你實際上問在這裏,但你的進度不更新的原因是,你沒有真正告訴它更新,除非你移動滑塊。

請注意,您對「lengthSlider」組件的Slide事件的密碼是「好,弱還是可以」有全部的邏輯。然而,在那段代碼中你沒有設置ProgressBar的值 - 這似乎是在我認爲是生成密碼按鈕的「bgen_Click」事件上完成的?

爲了在操作單個控件時更新GUI,您需要調用相應的代碼。我建議你把所有的邏輯都放到有意義的函數中,並根據需要調用它們。

個人而言,我不得不沿着這些路線的東西:

  • GetPasswordStrengthString(); - 檢查符號和數字checkbox.checked以及返回適合「strLabel」標籤的字符串的長度。

  • CalculateStrengthBarLength(); - 您的所有邏輯來確定ProgressBar的長度

然後,只要您希望它們生效,就可以調用它們。例如,在符號和數字複選框的CheckedChanged事件處於更改狀態時,您需要在ProgressBar中看到它。