Przejście pętlą For po TabPage'ach od SelectedIndex

0

Witam, chciałbym przelecieć pętlą for po TabPage'ach ale w kolejnosci :

TabControl1.SelectedIndex To TabControl1.TabCount - 1

a następnie

PageIndex As Integer = 0 To TabControl1.SelectedIndex
For PageIndex As Integer = (TabControl1.SelectedIndex) To TabControl1.TabCount - 1
Next

jak to zmodyfikowac?

inaczej mówiąc, aby pętla przeleciala od zaznaczonej karty do końca, a po dotarciu do koncowej karty - leciala od poczatku do karty od ktorej pętla się zaczeła.

dodanie znacznika <code class="vbnet"> - furious programming

0
for i in 0..size:
    adjusted_i = (i + selected) % size

dopasuj pseudokod do swojego problemu.
http://ideone.com/Dj5ysT

0

nie rozumiem jak to zastosowac...

0

ewentualnie jak mozna zastosowac pętle while ?

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim koncowy_index_petli As Integer
        'zapisuje koncowy index petli
        If TabControl1.SelectedIndex > 0 Then
            koncowy_index_petli = TabControl1.SelectedIndex - 1
        Else
            koncowy_index_petli = TabControl1.TabCount
        End If





        'dopóki zaznaczony index nie jest równy koncowy_index_petli
        While Not TabControl1.SelectedIndex = koncowy_index_petli
            'jezeli pętla dojdzie do koncowej karty, przejdz do 0 karty
            If TabControl1.SelectedIndex = TabControl1.TabCount - 1 Then
                TabControl1.SelectTab(0)

            Else
                'w przeciwnym wypadku przejdz do kolejnej karty
                TabControl1.SelectTab(TabControl1.SelectedIndex + 1)
            End If



        End While
    End Sub
0

Tylko, że leci od zaznaczonego do końca, a później od końca do początku zamiast od tej co się pętla zaczęła.
C#

        private void button1_Click(object sender, EventArgs e)
        {
            do
            {
                MessageBox.Show("Zaznaczony: " + tabControl1.SelectedIndex);
                tabControl1.SelectedIndex = tabControl1.SelectedIndex + 1;
                if (tabControl1.SelectedIndex == tabControl1.TabCount - 1)
                {
                    do
                    {
                        MessageBox.Show("Zaznaczony: " + tabControl1.SelectedIndex);
                        tabControl1.SelectedIndex = tabControl1.SelectedIndex - 1;

                    } while (tabControl1.SelectedIndex >= 0);
                }
            } while (tabControl1.SelectedIndex != tabControl1.TabCount);
        }
 
0

napisalem taki kod, ale wydaje mi sie on troche chaotyczny...

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim koncowy_index_petli As Integer
        'zapisuje koncowy index petli
        If TabControl1.SelectedIndex > 0 Then
            koncowy_index_petli = TabControl1.SelectedIndex - 1
        Else
            koncowy_index_petli = TabControl1.TabCount
        End If


        'dopóki zaznaczony index nie jest równy koncowy_index_petli
        While Not TabControl1.SelectedIndex = koncowy_index_petli
            'jezeli pętla dojdzie do koncowej karty, przejdz do 0 karty
            If TabControl1.SelectedIndex = TabControl1.TabCount - 1 Then
                Exit While

            Else
                'w przeciwnym wypadku przejdz do kolejnej karty
                TabControl1.SelectTab(TabControl1.SelectedIndex + 1)
            End If
        End While



        If TabControl1.SelectedIndex = TabControl1.TabCount - 1 Then
            TabControl1.SelectTab(0)
            While Not TabControl1.SelectedIndex = koncowy_index_petli
                If TabControl1.SelectedIndex = TabControl1.TabCount - 1 Then
                    Exit While
                End If
                TabControl1.SelectTab(TabControl1.SelectedIndex + 1)
            End While

        End If

    End Sub

moze byc ? czy poprawic cos ?

1

Nie rozumiem co kombinujecie po co pętle while jak do tego celu nadaje się for

    Private Sub DoWork(PageIndex As Integer)
        'tu coś robisz...
        TabControl1.SelectedIndex = PageIndex
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim seletIndex As Integer = TabControl1.SelectedIndex
        Dim endIndex As Integer = TabControl1.TabCount - 1

        For pageIndex As Integer = seletIndex To endIndex
            DoWork(pageIndex)
        Next

        For pageIndex = 0 To seletIndex
            DoWork(pageIndex)
        Next
    End Sub

EDIT przecież proste rozwiązanie zostało już podane (wcześnie nie wpadłem na to że można to załatwić w jednej pętli)... w VB to wygląda tak:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim seletIndex As Integer = TabControl1.SelectedIndex
        Dim endIndex As Integer = TabControl1.TabCount

        For i As Integer = 0 To endIndex - 1
            Dim PageIndex = (i + seletIndex) Mod endIndex
            'tu coś robisz
        Next
    End Sub

1 użytkowników online, w tym zalogowanych: 0, gości: 1