У меня возникла проблема с отладкой конкретной проблемы с бумажной бумагой. Кажется, что VB6 не обновляет/не обновляет информацию о принтере во время отладки. Я сузил его до простого кода.Информация для принтеров не освежает при отладке
Private Sub Form_Load()
Dim prt As Printer
For Each prt In Printers
AddOutput prt.DeviceName
AddOutput "Paperbin: " & prt.PaperBin
Next
End Sub
Этот код проходит через все принтеры и показывает их имена и значения бумажной массы. Процедура AddOutput
добавляет ее в текстовое поле. Когда я запускаю этот код из VB6 IDE, значение бумаги одинаково для всех принтеров. Когда я компилирую этот код в исполняемый файл и запускаю его, на выходе отображаются правильные значения бумаги. Я узнал, что когда я добавляю часы к объекту prt
и сворачиваю информацию, которая правильно обновляется в бумажной коробке. С этого момента среда VB6 IDE использует это конкретное значение бумажной массы для всех принтеров.
Почему VB6 IDE дает неправильное значение, а скомпилированная версия дает правильное значение?
Я тестировал этот код на Windows 7.
Update
Повторение петли по индексу не делают никакой разницы, поэтому использование For i = 0 to Printers.Count -1
имеет такую же проблему, как с помощью For each prt in Printers
.
Другие свойства также затронуты. Свойства, такие как PrintQuality
, PaperSize
и Duplex
не обновляются. Свойства DeviceName
и Port
обновляются корректно.
Прошло много времени с тех пор, как я имел дело с VB6, поэтому я не могу много помочь, но мне любопытно: изменились ли другие свойства объекта Printer при работе в среде IDE? Работает ли он по-другому, если вы зацикливаете по индексу вместо использования для каждого? –
Обновляется ли 'DeviceName' правильно? –
'DeviceName' корректно обновляется. Цикличность по индексу не имеет значения. Другие свойства также выполняются. Я не тестировал их все, но «PaperSize», «Duplex» и «PrintQuality» имеют ту же проблему. – Martin