2015-12-08 4 views
0

Я знаю, как проверить, если переменная пуста или нет, но то, что я пытаюсь сделать, это отобразить сообщение на пустой переменной, например:Как проверить, пуст ли несколько переменных?

Dim server_name = TextBox1.Text 
    Dim username = TextBox2.Text 
    Dim password = TextBox3.Text 
    Dim database = TextBox4.Text 

    If server_name.Length > 0 And username.Length > 0 And password.Length > 0 And database.Length > 0 Then 

    End If 

Как вы можете видеть Я мультипликатор состояние, так что если server_name пуста я хочу отобразить сообщение

поле имя сервера не заполнены правильно

это можно сделать это без еще если?

ответ

3

Я бы использовал If..., даже если вам это не нравится. Однако, если вы хотите что-то «более элегантный» вы можете использовать коллекцию и Linq:

Dim allFields = New List(Of KeyValuePair(Of String, String)) From { 
    New KeyValuePair(Of String, String)("Server name", server_name), 
    New KeyValuePair(Of String, String)("User name", username), 
    New KeyValuePair(Of String, String)("Password", password), 
    New KeyValuePair(Of String, String)("Database", database) 
} 

Dim invalids = From kv In allFields 
       Where String.IsNullOrEmpty(kv.Value) 

For Each invalid In invalids 
    Console.WriteLine("{0} field isn't filled correctly", invalid.Key) 
Next 

Просто другой вопрос, это возможный набор цвет переднего плана красный пустое поле в Еогеасп?

Да, то вам нужно хранить TextBox вместо только это Text в Value. После этого вы можете установить цвет TextBox в петле:

Dim allFields As New List(Of KeyValuePair(Of String, TextBox)) From { 
    New KeyValuePair(Of String, TextBox)("Server name", TextBox1), 
    New KeyValuePair(Of String, TextBox)("User name", TextBox2), 
    New KeyValuePair(Of String, TextBox)("Password", TextBox3), 
    New KeyValuePair(Of String, TextBox)("Database", TextBox4) 
} 

Dim invalids = From kv In allFields 
       Where String.IsNullOrEmpty(kv.Value.Text) 

For Each invalid In invalids 
    Console.WriteLine("{0} field isn't filled correctly", invalid.Key) 
    invalid.Value.ForeColor = Drawing.Color.Red 
Next 

Обратите внимание, что это имеет еще одно преимущество: вы можете даже объявить этот список в качестве поля в классе (форма). Поэтому вам нужно только объявить и инициализировать его один раз. Если вы выполняете запрос LINQ в For Each, он автоматически оценивает его с текущими значениями в текстовых окнах, а не с начальными, когда список был инициализирован. Примечание: вы должны использовать более значимые имена, такие как TxtPassword, а не TextBox3.

+0

Кажется хорошим решением, не могли бы вы например, что такое от kv? – Dillinger

+0

@Dillinger: это [запрос LINQ] (https://msdn.microsoft.com/en-us/library/bb384667.aspx). Вам нужно добавить 'Импорт System.Linq', либо в файл, либо в проект (желательно). –

+0

Еще один вопрос: можно ли задать цвет переднего плана красным для пустого поля в foreach? – Dillinger

0

Есть много способов сделать это, я дам вам пример:

Dim s As String() = {TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text} 
If String.Join("", s).Length > 0 Then 
    ' program logic 
End If 

Эффективно, вы создаете массив строк, а затем вы присоединиться к ним и проверить длину конечной строки в.

Смежные вопросы