2017-03-12 39 views
0

我有一個簡單的庫存應用程序,我正在努力幫助自己學習C#。我有一個註冊Windows窗體,將用戶添加到數據庫,以便他們可以登錄到應用程序。有用。不過,我現在正在努力添加一些文本框驗證。我有三個文本框,如果它們是空的,它們將在它們旁邊填充標籤。但是,我無法弄清楚如何在輸入文本後將標籤置空或隱藏。有什麼建議麼?一旦輸入文本,驗證文本框不是空標籤和隱藏標籤

這是我在createButton_Click方法代碼:

private void createButton_Click(object sender, EventArgs e) 
    { 
     OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|FAMDatabase.accdb"); 
     OleDbCommand fcmd = new OleDbCommand("INSERT INTO Login([UserName],[Password])" + "values(@username,@password)", con); 
     fcmd.Parameters.AddWithValue("@username", newUserTextBox.Text); 
     fcmd.Parameters.AddWithValue("@password", newPasswordTextBox.Text); 

     if (string.IsNullOrEmpty(newUserTextBox.Text)) 
     { 
      reqName.Text = ("Please enter a User Name"); 
     } 
     if (string.IsNullOrEmpty(newPasswordTextBox.Text)) 
     { 
      reqPW.Text = ("Please enter a Password"); 
     } 
     else if (newPasswordTextBox.Text != newPasswordTextBox2.Text) 
     { 
      reqPW2.Text = ("Passwords Do Not Match"); 
     } 
     else 
     { 
      con.Open(); 
      int i = fcmd.ExecuteNonQuery(); 
      con.Close(); 
      MessageBox.Show(
       "User Successfully Created", 
       "", 
       MessageBoxButtons.OK, 
       MessageBoxIcon.Information, 
       MessageBoxDefaultButton.Button1); 
      this.Close(); 
     } 
    } 

回答

1

我不完全相信,如果我按照您的評論:

我無法弄清楚如何獲取標籤爲空或隱藏輸入

使標籤後的文本null是可能的,但是爲了隱藏標籤,您可以簡單地將標籤的文本設置爲空字符串。例如:reqName.Text = "";

您可以在用戶按下創建按鈕後設置標籤,這似乎是發佈的代碼正在做的事情。但是,如果您希望這些標籤在用戶鍵入文本框時隱藏/顯示,但在用戶按下創建按鈕之前,則需要爲每個文本框設置一些事件,以便在用戶完成後更改適當的標籤鍵入其中一個文本框。一個便利的事件是每個文本框的TextChanged事件。文本更改後,您可以爲該文本框設置適當的標籤。

使用這個,我會建議的另一件事是不混合用戶驗證與插入到數據庫中。示例:在按鈕單擊方法的開始處,使用尚未驗證的值設置要插入到數據庫中的參數。如果任何文本框文本無效,這是不必要的。因此分離這個用戶驗證並插入數據庫會使事情變得更加簡單和合乎邏輯。

下面是一個方法ValidUserInput,用於檢查用戶輸入的有效性,如果數據有效,則返回true,否則返回false。該方法還會返回一個字符串消息,以指示數據無效時出現的問題。然後在按鈕單擊事件中,您可以檢查有效性,如果有效,則將其添加到數據庫中。我註釋到添加到數據庫,因爲它似乎這可能會爲你工作。如果用戶輸入無效,我還添加了一個結果標籤來說明問題所在。

三個事件用於在用戶鍵入時更新標籤。兩個輔助方法:ClearLabelsSetLabels用於清除和設置表單上的標籤。希望這可以幫助。

public Form1() { 
    InitializeComponent(); 
    ClearLabels(); 
    SetLabels(); 
} 

private void createButton_Click(object sender, EventArgs e) { 
    string statusString = ""; 

    if (!ValidUserInput(out statusString)) { 
    lblStatus.Text = statusString; 
    } 
    else { 
    ///OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|FAMDatabase.accdb"); 
    //OleDbCommand fcmd = new OleDbCommand("INSERT INTO Login([UserName],[Password])" + "values(@username,@password)", con); 
    //fcmd.Parameters.AddWithValue("@username", newUserTextBox.Text); 
    //fcmd.Parameters.AddWithValue("@password", newPasswordTextBox.Text); 
    //con.Open(); 
    //int i = fcmd.ExecuteNonQuery(); 
    //con.Close(); 
    MessageBox.Show("User Successfully Created","", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); 
    //this.Close(); 
    } 
} 

private bool ValidUserInput(out string message) { 
    ClearLabels(); 
    if (string.IsNullOrEmpty(newUserTextBox.Text)) { 
    reqName.Text = ("Please enter a User Name"); 
    message = "UserName can not be blank!"; 
    return false; 
    } 
    if (string.IsNullOrEmpty(newPasswordTextBox.Text)) { 
    reqPW.Text = ("Please enter a Password"); 
    message = "Password can not be blank!"; 
    return false; 
    } 
    if (string.IsNullOrEmpty(newPasswordTextBox2.Text)) { 
    reqPW2.Text = ("Please enter a Password "); 
    message = "Password verification can not be blank!"; 
    return false; 
    } 
    if (newPasswordTextBox.Text != newPasswordTextBox2.Text) { 
    reqPW.Text = ("Passwords Do Not Match"); 
    reqPW2.Text = ("Passwords Do Not Match"); 
    message = "Password must match!"; 
    return false; 
    } 
    message = "Valid User Input"; 
    return true; 
} 

private void ClearLabels() { 
    reqName.Text = ""; 
    reqPW.Text = ""; 
    reqPW2.Text = ""; 
    lblStatus.Text = ""; 
} 

private void SetLabels() { 
    ClearLabels(); 
    if (string.IsNullOrEmpty(newUserTextBox.Text)) { 
    reqName.Text = "Please enter a User Name"; 
    } 
    if (string.IsNullOrEmpty(newPasswordTextBox.Text)) { 
    reqPW.Text = "Please enter a Password"; 
    } 
    if (string.IsNullOrEmpty(newPasswordTextBox2.Text)) { 
    reqPW2.Text = "Please enter a Password"; 
    } 
    lblStatus.Text = "Enter userName and password"; 
} 

private void newUserTextBox_TextChanged(object sender, EventArgs e) { 
    if (string.IsNullOrEmpty(newUserTextBox.Text)) { 
    reqName.Text = "Please enter a User Name"; 
    } 
    else { 
    reqName.Text = ""; 
    } 
} 

private void newPasswordTextBox_TextChanged(object sender, EventArgs e) { 
    if (string.IsNullOrEmpty(newPasswordTextBox.Text)) { 
    reqPW.Text = "Please enter a Password"; 
    } else { 
    reqPW.Text = ""; 
    } 
} 

private void newPasswordTextBox2_TextChanged(object sender, EventArgs e) { 
    if (string.IsNullOrEmpty(newPasswordTextBox2.Text)) { 
    reqPW2.Text = "Please enter a Password"; 
    } else { 
    reqPW2.Text = ""; 
    } 
} 
+0

感謝您的回覆。我想澄清一下,我可以驗證工作正常。但是當用戶去填寫用戶名的文本框時,例如錯誤標籤仍顯示「請輸入用戶名」消息。我猜我將需要使用textChanged事件? – LearningCSharp

+0

@LearningCSharp您的評論:_我可以驗證工作正常。但是,當用戶去填寫用戶名稱的文本框,例如錯誤標籤仍顯示「請輸入用戶名」消息。所以它工作正常,除了???我在答覆中發佈的代碼按照您的要求提供。一旦用戶開始輸入'newUserTextBox' ...'reqName'標籤的文本「請輸入用戶名」將不會顯示。直到用戶刪除'newUserTextBox'中的文本,它纔會繼續顯示。我猜我可能會錯過一些東西。 – JohnG

+0

我能夠通過刪除私有的無效SetLabels()方法來實現它。用它,它將標籤設置爲加載的表單時的錯誤。 – LearningCSharp

1

你可以使用CSS屬性visiblity: hidden;,的CSS屬性display: none;,或者你可以簡單地將文本更改爲空字符串。