Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Часть кода срабатывает быстрее чем надо Добавлено: 01.09.06 09:45  

Автор вопроса:  Strike1984 | ICQ: 247188203 
Здравствуйте, мне необходимо из listview, в котором хранятся адреса отправителей почты, разослать сообщения автоматом по кнопке, причем если в ящике ОДНО сообщение, то срабатывает ПРАВИЛЬНО, а если 2 и более, то ошибка, по-видимому не успевает завершить call, как уже textbox(отправки) забивается следующими адресами. Как сделать, чтобы только после Call cmdSend_Click, происходило увелечение i, и программа опять шла по кругу?
Private Sub AutoOtpravka_Click()
Dim a As Integer
Dim i As Integer
  a = lvMessages.ListItems.Count
  Text2.Text = a
      For i = 0 To a Step 1
         i = i + 1
         txtRecipient.Text = lvMessages.ListItems(i).Text 'в зависимости от изменений ошибка здесь или ниже
         Call cmdSend_Click
      Next
End Sub

Private Sub cmdSend_Click()
Dim i As Integer
    '
    'prepare attachments
    '
    For i = 0 To lstAttachments.ListCount - 1
        lstAttachments.ListIndex = i
        m_strEncodedFiles = m_strEncodedFiles & _
                         UUEncodeFile(lstAttachments.Text) & vbCrLf
    Next i
    '
    Winsock2.Connect Trim$(txtHostSmtp), 25 'или ошибка здесь
    m_StateS = MAIL_CONNECT
End Sub

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 zulus



Вопросов: 2
Ответов: 23
 Профиль | | #1 Добавлено: 01.09.06 11:11
Ну насколько я понял трабла у тебя тут:

For i = 0 To a Step 1
 i = i + 1
  txtRecipient.Text = lvMessages.ListItems(i).Text
   Call cmdSend_Click
Next

У тебя i увеличивается на один лишний ЦИФР. Кстати Listview отсчитывает с 1. Т.е. твой код такой должен быть таким:

 For I = 1 To a
  txtRecipient.Text = lvMessages.ListItems(i).Text
   Call cmdSend_Click
 Next I

Ответить

Номер ответа: 2
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #2 Добавлено: 01.09.06 11:37
Еще один... Человек пытается рассылать спам из VB даже не представляя элементарного синтаксиса языка.

Ответить

Номер ответа: 3
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 01.09.06 11:42
и не только синтаксиса ((

Ответить

Номер ответа: 4
Автор ответа:
 Strike1984



ICQ: 247188203 

Вопросов: 4
Ответов: 2
 Профиль | | #4 Добавлено: 07.09.06 08:53
Не собираюсь я заниматься рассылкой спама.
И циклы у меня были правильные, просто я запаганил код, потому что программа не работала, Вот код, я после каждой строчки вставлял MsgBox "типа это ... выполнено", в том числе и в Private Sub cmdSend_Click(), и цикл у меня происходит ровно столько раз, сколько надо, а вот call срабатывает один. Я думаю тут нужна какая-то логическая переменная, чтобы цикл в AutoOtpravka_Click() продолжался, только после того, как Winsock2 закроется сам (после отправки сообщения)?

Private Sub AutoOtpravka_Click()
Dim i As Integer

For i = 1 To lvMessages.ListItems.Count
    txtRecipient.Text = lvMessages.ListItems(i).Text
    MsgBox "Call cmdSend_Click"
    Call cmdSend_Click
Next i

End Sub

Private Sub cmdSend_Click()

Dim i As Integer
    '
    'prepare attachments
    '
    For i = 0 To lstAttachments.ListCount - 1
        
        lstAttachments.ListIndex = i
        m_strEncodedFiles = m_strEncodedFiles & _
                         UUEncodeFile(lstAttachments.Text) & vbCrLf
    Next i
    
    MsgBox "cmdSend_Click()"
    
    Winsock2.Close
    m_StateS = MAIL_CONNECT
    Winsock2.Connect Trim$(txtHostSmtp), 25
End Sub

Ответить

Номер ответа: 5
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #5 Добавлено: 07.09.06 11:19
Интересно, а чего ты ожидал? Где у тебя обработка Winsock2_Connect? Немного странно впрягать асинхронную операцию в линейный цикл. Добавь хоть какую-то синхронизацию, либо меняй логику.

Ответить

Номер ответа: 6
Автор ответа:
 Fever



Вопросов: 60
Ответов: 808
 Профиль | | #6 Добавлено: 09.09.06 14:56
Реализуй очередь вызовов cmdSend_Click() и проблема решена!

Ответить

Номер ответа: 7
Автор ответа:
 Fever



Вопросов: 60
Ответов: 808
 Профиль | | #7 Добавлено: 09.09.06 14:57
Или вместо Call cmdSend_Click вставь код этой процедуры. Конечно длиннее, но ...

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам