VisualBasic.NET -> Цикли и масиви
05-11-2009
Предишни уроци:
Въведение
Класове и модули
GUI и събития

В този урок ще се запознаем с циклите и масивите.

Цикъл For
Най-често се използва, когато ни трябва една променлива от числен тип да приема стойност от някакво число до друго число.
Синтаксис:
For i As Integer = 0 To 10
...
Next

Тук променливата i ще приеме стойности от 0 до 10 => цикълът ще се изпълни 11 пъти. Обърнете внимание, че променлвата i не е декларирана преди For блока, а се използва без нужда от деклариране в самия For. 0 е зададената начална стойност, а 10 - крайната. As Integer оказва типа на променливата.

Цикъл While
Тъй като при този цикъл условието за повторение е булев израз While се ползва основно за операции, където едни оператори трябва да се изпълнят докато някакво условие престане да бъде вярно. Ползва се също и за безкраен цикъл в някои специфични случаи, когато за условие се подаде True.
While True
...
End While

Този пример е един безкраен цикъл. Булевото условие се слага на мястото на True и цикълът спира, когато условието стане равно на False.

Цикъл For Each
For Each се използва за обхождане на масив (Array) или друг подобен на масив тип (Collection)
For Each element As String In masiv
...
Next

На първия ред се оказва временната променлива element, която трябва да е от същия тип както и елементите на масива masiv и в случая е String. Отново няма нужда от предварително деклариране на element.
Самият цикъл ще се повтори толкова пъти, колкото са елементите в масива, а всеки път променливата element ще съдържа по един елемент от този масив. Това се нарича обхождане на масив - изпълняване на една операция за всеки от елементите му.

Обикновени масиви
Какво е масив? На кратко масив е колекция от елементи от един и същи тип, като всеки елемент има уникален номер в колекцията. Този номер се нарича индекс.
Във VB.NET има няколко начина да се декларира масив. Тук на всеки масив трябва задължително да се зададе капацитет (максимална дължина/най-голям възможен индекс) още при декларирането.

Деклариране на масив без задаване на максималeн брой елементи:
Dim masiv As String()

Така създаваме неопределен масив с елементи от тип string. Но защо ще го създаваме така ако не можем да го ползваме. Така декларирана това е една празна променлива. Затова може да приеме стойностите на върнат от функция параметър, но не можем да задаваме директно стойности на елементите преди това. Аналогично е с Клас без да е зададен New Class()...

Деклариране със задаване на максимален индекс:
Dim masiv(5) As String

Сега сме задали максимален индекс на масива. Може да съдържа елементи с индекс 0, 1, 2, 3, 4, 5 - общо 6 елемента, тъй като винаги започват от нула. Така деклариран вече можем да задаваме директно стойности на елементите.
masiv(0) = "Елемент с индекс 0"
masiv(3) = "Елемент с индекс 3"

Ако се опитате да изведете елемент, чиято стойност все още не е зададена програмата ще ви изведе грешка "Object reference not set to an instance of an object".

Повторно деклариране на вече деклариран масив:
В някои случаи ще ви трябва вашият масив да се разширява според елементите, които му задавате. Това става с повторно деклариране на масива. Така можете да разширите масива, като му зададете нов максимален индекс.
ReDim Preserve masiv(6)

Ключовата дума Preserve оказва, че данните в масива не трябва да се изтрият при разширяване на масива. Новата максимална стойност на индекса е 6, а елементите от 0 до 5 са се запазили.

Пример за масиви и For Each във видеото.
Код от видеото:
Public masiv As String()

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
ReDim Preserve masiv(masiv.Length)
Catch ex As Exception
ReDim Preserve masiv(0)
End Try

masiv(masiv.Length - 1) = TextBox1.Text

TextBox1.Text = ""
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
TextBox2.Text = ""

For Each element As String In masiv
TextBox2.Text += "Element: " + element + ControlChars.NewLine
Next
End Sub




/ Трябва да сте регистриран за да напишете коментар /
От: stoqnski
13:44 05-11-2009
Как да свържем програма със сайт и по-точно с База Данни-те на сайт с таблици,полета в PhpMyAdmin ? - нещо уроче или на ЛС да пишеш .. :) Ще съм ти много благодарен .
От: stoqnski
13:46 05-11-2009
и 2-рия ми въпрос можем ли да вкараме php скрипт в програмата , който да работи с даден config оказан в кода за връзка с БД-то и съответно да изпълнява функционалността си . Може би говоря глупости , не ме убиждайте :D , но не разбирам и искам да науча :)
От: StormBreaker
17:55 05-11-2009
PHP код не можеш да вкараш в програмата. За работа с БД ще има друг урок (може би следващия) защото в едно ЛС няма как да обясня всичко. А този урок съм го планувал и ще го направя когато имам време :)
От: StormBreaker
17:59 05-11-2009
Забравих да кажа. Имаш и друг вариант. През php да вземеш информацията, която ти трябва. НЕ да вкараш php код в програмата, ами с нея да отвориш и да прочетеш дадена сорс кода на страница (например твой php файл да връща нещо и да го прочетеш с програмата).

Ето ти функция да вземеш изходния код на дадена страница (първият параметър)
Public Function GetPageSource(ByVal pageUrl As String) As String
Dim s As String = ""
request = WebRequest.Create(pageUrl)
response = request.GetResponse()

Try
reader = New StreamReader(response.GetResponseStream())
s = reader.ReadToEnd()
Catch ex As Exception
Debug.WriteLine("Couldn't get web page source!" + vbNewLine + pageUrl)
End Try

Return s
End Function
От: stoqnski
15:32 06-11-2009
Мерси братле ще тествам :)
От: StormBreaker
16:00 06-11-2009
Забравил съм да ти постна декларациите:

Public request As WebRequest
Public response As WebResponse
Public reader As StreamReader
1