Игнорируются команды после тела цикла. Помогите новичку.

Тема в разделе "Visual Basic", создана пользователем forem0st, 9 янв 2011.

  1. forem0st

    forem0st New Member

    Регистрация:
    9 янв 2011
    Сообщения:
    1
    Симпатии:
    0
    Все что следует после End While попросту игнорируется... Может так и надо и я что то упустил в книжках, только мне ещё нужен код для обработчика нажатия кнопки - не дописана процедура :rolleyes:. Как быть Как заставить выполняться код после End While?
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"Код"</div></div><div class="sp-body"><div class="sp-content">
    Код (LotusScript):
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    Dim str, str_beg, str_end As String
    Dim k, x, n, wib_hight, edge As Integer
    n = 0 : k = 0 : x = 9 : n = 0
    Dim shift_x, shift_y As Single
    Dim permission As Boolean = True
    shift_x = 55 : shift_y = 55 : edge = 3
    work_image_small = Nothing
    open_src.InitialDirectory = "C:\document`s\Visual Studio 2008\Projects\ProE_Font_Visor\ProE_Font_Visor\Исходники шрифтов ProE"
    open_src.ShowDialog()
    Label2.Text = My.Computer.FileSystem.GetName(open_src.FileName)
    'Process.Start("notepad.exe", open_src.FileName)
    Dim put As String = open_src.FileName
    str = crup_heder(reader(put))
    Dim col As Color = Color.FromArgb(185, Color.LightGreen)
    'str_beg = crup_char(str)
    'str_end = crup_tail(str_beg, str)
    While str.Length <> 0
    k += 1
    str_beg = crup_char(str)
    str_end = crup_tail(str_beg, str)
    If str_end = Nothing Then Exit Sub
    Dim dsd As New draw_sym_date(str_beg)
    Dim bms As New bit_map_sym(dsd.normalise_point, dsd.dim_sym, dsd.header, k)
    If permission Then TextBox1.AppendText(dsd.header & vbCrLf)
    permission = True
    Try
    Dim bm As Bitmap = Nothing
    Array.Resize(work_image_small, k)
    work_image_small(k - 1) = bms.bm
    wib_hight = CInt(2 * edge + Math.Ceiling(k / x))
    Catch ex As Exception
    TextBox2.AppendText(dsd.header & vbCrLf)
    permission = False
    n += 1
    Label1.Visible = True
    Label1.Text = "Не распознано " & vbCrLf & " символов - " & CStr(n)
    Exit Try
    End Try
    str = Nothing
    str = str_end
    End While
    Debug.WriteLine(wib_hight.ToString)
    work_image_big = New Bitmap(PictureBox1.Width, wib_hight)


    End Sub
    work_image_big -глобальная переменная -объявлена в классе, так же как и массив work_image_small...Может ещё какие замечания будут? Скажите. Я всего пару месяцев разбираюсь в Visual Basic любые подсказки ценны!
     
  2. VBAaddict

    VBAaddict Гость

    А Visual ли это Basic?

    Я давненько им пользовался - сейчас все больше VBA
    но, например,
    1) конструкция k += 1 очень не бейсиковская
    2) и еще - кто вас научил засовывать Dim в цикл ???!!! это же оператор объявления переменной - оно должно производится один раз и по этикету - в начале процедуры
    3) Try ... и зачем вы залезли в использование обработки ошибок??? такое применение _обычно_ происходит в отладочных целях, а не для рабочего кода. А нормальную ситуацию необходимо обрабатывать If, Case и т.п.
     
  3. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    кстати, в что после str = Nothing вернет str.Length?
    не даст ошибку ли?
     
  4. forem0st

    forem0st New Member

    Регистрация:
    9 янв 2011
    Сообщения:
    1
    Симпатии:
    0
    Во первых очень благодарен что откликнулись!
    1. Конструкцию k+=1, a*=d, c>>=10 и т.д. умные книжки рекомендуют к применению (вроде ввели с 2005 VB), якобы при этом экономится одна ячейка памяти... Не знаю, но выглядит трикольно и короче пишется :what?:
    2. На счет dim только сейчас понял, как вы правы! Объявить то можно было в начале, а присвоить уже в цикле! ( самоучительство - хуже самолечения ...). Больше не буду так делать.
    3. Try тут совершенно необходима. Программа обрабатывает текстовый файл с возможными ошибками (это хреново декомпилированый файл шрифта ProEngineer с ним такое бывает) , если попадается кусок текста, где символ невозможно распознать, но дальше все нормально и нужно продолжать, программа выводит в текстбокс заголовок этого места в тексте файла и считает сколько симолов не поняла... И т.д.
     
  5. forem0st

    forem0st New Member

    Регистрация:
    9 янв 2011
    Сообщения:
    1
    Симпатии:
    0
    И вам большое спасибо за отзывчивость!
    Сразу скажу - программа полностью рабочая, она дописана и делает то, что нужно - анализирует текстовый файл с исходниками шрифта и выводит в изображение ( as bitmap) начертания букв, а в текстбоксы соответствующие им коды.
    На счет str = Nothing. Программа обрабатывает переменную типа str as string (весь текстовый файл). Откусывает от него по кусочку с переди (str_beg), оставляя кусочек сзади (str_end). Откусанный кусочек обрабатывается, потом переменная стриг обнуляется и ей присваивается значение оставшегося хвоста. Обработка продолжается пока текст не кончиться (While str.Length <> 0)
    Сабжевую проблему я решил: искусственно засунув злосчастный цикл в подпрограмму sub() ... end sub
    Но вопрос остался!
    Какого хобота при использовании цикла While ... End While VB2008 после выполнения цикла скачет сразу на END Sub начисто игнорируя все что между End While и END Sub.
    Причем я менял цикл на For...Next - все нормально работает!
    Может есть какие нить соображения?
    Может и правда - это из-за DIM в теле цикла?! Но тогда почему - в FOR NEXT все нормально?
     
  6. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Да, правы, чего-то там я дальше недосмотрела внимательно, что строка переприсваивается, сорри. В цикле есть еще выход из процедуры Exit Sub (в теле цикла) - может, он влияет, там действительно так надо, а не просто выйти из цикла While?
     
  7. forem0st

    forem0st New Member

    Регистрация:
    9 янв 2011
    Сообщения:
    1
    Симпатии:
    0
    Блин! Точно! Ну спасиб !! А то я всю головешку поломал. Вместо екзит вайл нечаяно из списка щелкнул на екзит саб. Смотрю и в упор не вижу!
    А когда я для проверки на FOR менял - там естественно екзит саб не писалось и все намана было...
    Все проблема решена, виной всему невнимательность.
     
Загрузка...
Похожие Темы - Игнорируются команды после
  1. Job offer
    Ответов:
    0
    Просмотров:
    405
  2. iNet
    Ответов:
    1
    Просмотров:
    1.416
  3. iNet
    Ответов:
    0
    Просмотров:
    1.452
  4. gravemaggot
    Ответов:
    2
    Просмотров:
    2.027

Поделиться этой страницей