Как правильно скачать файл? - Visual Basic .NET

  1. Хочу скачать файл .exe по такому алгоритму:vb.net1 My.Computer.Network.DownloadFile("сайт", "c:\путь куда сохранить")Все скачивается но когда делаю запуск вылетает консольное окно с ошибкой 16 bit и кнопка закрыть. В чем проблема?Файл который качает рабочий.Это Hello World на vb.


textual

Код:

Option Compare Database
Option Explicit
 
Public Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
    (ByVal Caller As Long, _
    ByVal URL As String, _
    ByVal FileName As String, _
    ByVal Reserved As Long, _
    ByVal CB As Long) As Long
 
Public Function DownloadFile(FromPathName As String, ToPathName As String) As Boolean
DownloadFile = (URLDownloadToFile(0, FromPathName, ToPathName, 0, 0) = 0)
End Function


Похожие ответы
  1. Подскажите, как не нагромождая гору кода по простому конвертировать то, что имею в textbox в другую кодировку? Заполняю textbox такvb.net1 2 3 4 5 6 If (BassTags.BASS_TAG_GetFromURL(Stream, TI)) Then             TextBox1.Text = TI.album             TextBox3.Text = TI.artist             TextBox2.Text = TI.comment             TextBox4.Text = TI.title         End IfВ итоге, если там есть кириллица, то все выглядит вот так:

  1. Имеется программа, вводишь 2 числа, высвечивается большее. Соответственно, если вводишь не число, пишет ошибку. Есть одно НО, программа неправильно определяет большее из отрицательных чисел: пишет, что -3>-1 и т.п. Как исправить? Видимо берется модуль от числа, я хз. Наверное, все дело в String.vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 Private Sub cmdПуск_Click(sender As Object, e As EventArgs) Handles cmdПуск.Click         Dim A As String, B As String         A = txtA.Text         B = txtB.Text         If IsNumeric(A) And IsNumeric(B) Then             A = Val(txtA.Text)             B = Val(txtB.Text)             If A > B Then MsgBox("Большее из чисел = " + A, 0, "Результат")             If A < B Then MsgBox("Большее из чисел = " + B, 0, "Результат")             If A = B Then MsgBox("Числа равны", 0, "Результат")         Else MsgBox("Ошибка! Проверьте введенные данные!", 16, "Результат")         End If     End Sub

  1. Есть свойство в пользовательском контроле, которое пользователь не должен использовать. Но в то же время это свойство активно используется при программировании самого контрола. Например, свойство Text контрола, предназначенного только для ввода чисел, теряет смысл и заменяется свойством Value, но если ввести в код контрола следующие строкиvb.net1 2 3 4 5 6 7 8 9    Private Shadows m_Text As String     Public Shadows Property Text() As String         Get             Return m_Text         End Get         Set(ByVal value As String)             m_Text = value         End Set     End Propertyто свойство Text не только исчезнет из списка доступных свойств контрола (этого я и добиваюсь), но не будет работать код контрола в тех местах, где свойство Text использовалось для задания поведения контрола ( а это недопустимо). То есть видеть и менять это свойство пользователь не должен, но участие свойства во внутреннем коде контрола необходимо. Как быть?

  1. Опять что-то конструктор поломался 1) форма, на ней DataGridView и кнопка "Добавить запись" . DataGridView не прикручиваю а прописываю программно:vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20  Private Sub TabPage3_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load         cn = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Path)         cn.Open()         DGV_Kontrol()     End Sub  Private Sub DGV_Kontrol()         da.SelectCommand = New OleDb.OleDbCommand("Select * from Kontrol Where [KontrolK]= '-' ", cn)         Dim Data As New DataTable         da.Fill(Data)         Fill_DGV(Data)     End Sub    Sub Fill_DGV(ByVal tbl As DataTable)         DataGridView3.DataSource = tbl         DataGridView3.Columns(0).Width = 110         DataGridView3.Columns(1).Width = 160         DataGridView3.Columns(2).Width = 65         DataGridView3.Columns(3).Width = 65         DataGridView3.Columns(4).Width = 65         DataGridView3.Columns(5).Width = 65     End SubПри нажатии кнопки "Добавить запись" открывается вторая форма для заполнения, с помощью которой добавляю запись в базу. Но как правильно при закрытии второй формы обновить DataGridView первой формы, что-бы увидеть изменения? Если DataGridView отверткой прикрутить к форме1 то тогда все просто: vb.net1 2 3 4 5 6         'Обновляю DataGridView Форма1         Me.Hide()         F1.Show()         F1.ZajavkaTableAdapter.Fill(F1.ZajavkaDataSet.Zajavka)         'Закрываю Форму2         Close()но тут такой вариант не работает

  1. В общем, вопрос такой: как правильно добавлять объекты в файл ресурсов? Простым копированием объектов в папку не получается. Я так полагаю, есть только один основной файл ресурсов, расположенный в папке Resources проекта. В этой парке находятся Resource1.Designer.vb, Resource1.resx и сами файлы. Если я добавляю ресурс с помощью Проект/Добавить новый элемент/Ресурс - добавляются новые Resource1.Designer.vb в корне проекта и возникает мешанина.

  1. На pinvoke.net для vb.net выложено следующее представление структуры:vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17   Public Structure DCB     Public DCBlength As Int32     Public BaudRate As Int32     Public fBitFields As Int32     Public wReserved As Int16     Public XonLim As Int16     Public XoffLim As Int16     Public ByteSize As Byte     Public Parity As Byte     Public StopBits As Byte     Public XonChar As Byte     Public XoffChar As Byte     Public ErrorChar As Byte     Public EofChar As Byte     Public EvtChar As Byte     Public wReserved1 As Int16 'Reserved; Do Not Use   End Structureв MSDN:C++1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 typedef struct _DCB {   DWORD DCBlength;   DWORD BaudRate;   DWORD fBinary  :1;   DWORD fParity  :1;   DWORD fOutxCtsFlow  :1;   DWORD fOutxDsrFlow  :1;   DWORD fDtrControl  :2;   DWORD fDsrSensitivity  :1;   DWORD fTXContinueOnXoff  :1;   DWORD fOutX  :1;   DWORD fInX  :1;   DWORD fErrorChar  :1;   DWORD fNull  :1;   DWORD fRtsControl  :2;   DWORD fAbortOnError  :1;   DWORD fDummy2  :17;   WORD  wReserved;   WORD  XonLim;   WORD  XoffLim;   BYTE  ByteSize;   BYTE  Parity;   BYTE  StopBits;   char  XonChar;   char  XoffChar;   char  ErrorChar;   char  EofChar;   char  EvtChar;   WORD  wReserved1; } DCB, *LPDCB;как понимать такие различия в размерах и содержимом? как правильно объявить структуру DCB на VB.NET?

  1. Добрый лень. Есть файл с кодированной базой. Для нее кем то было написано приложение, чтобы можно было узнать в каком разделе находится та или иная запись. При запуске "MyApp Форма125 base.dat" получается вот такой результат, пример: Раздел 2 Раздел 4 Раздел 5 Подраздел 1 Раздел 5 Подраздел 4 Раздел 7 и так далее пока искомая строка "Форма125" найдена На Bash, я перехватывала эти результаты для дальнейшей обработки, со своим комментариемBash1 2 3 4 5 for /f %%i in ('MyApp Форма125 base.dat') do (      set pos = %%i      echo Запись есть в %pos%      /* дальнейшие действия с переменной pos для передачи в другое приложение )В результате я получала: Запись есть в Раздел 2 Запись есть в Раздел 4 Запись есть в Раздел 5 Подраздел 1 и так далее. Сейчас пытаюсь реализовать подобное на VB.net, но результаты плачевныеvb.net1 2 3 4 5 Dim pos As String         Do             pos = RunExe("MyApp", "Форма125 base.dat")             RichTextBox2.AppendText("Найдено в  " & pos)         Loop Until pos <> ""В результате получается: Найдено в Раздел 2 Раздел 4 Раздел 5 Подраздел 1 и так далее, то есть я захватываю только Раздел 2 и всё, остальные результаты просто выводятся на экран и соответственно в переменной pos остается первая найденная запись "Раздел 2". Решив, что цикл выбран не верно пробую другойvb.net1 2 3 4 5 6 Dim pos As String         For Each pos In RunExe("MyApp", "Форма125 base.dat")             If pos <> Nothing Then                                 RichTextBox2.AppendText("Найдено в " & pos)             End If         NextИ тут вообше ужас В результате Найдено в Р Найдено в а Найдено в з Найдено в д Найдено в е Найдено в л Найдено в Найдено в 2 Найдено в Р Найдено в а ,,,,, И так далее. Но при этом выводится, что найдено во всех разделах и подразделах но в переменной pos не полная строка, а только буквы этой строки. Фунуцмя RunExe(), для работы с внешними приложениями используется из этой темы Помогите пожалуйста как правильно оформить цикл. Спасибо.

  1. Доброго времени! Вопрос теоретический - зачем нужен оператор New? Грамотно ли его использовать в блоке объявлений? Чем по сути отличаются эти две записи:vb.net1 2     Public L_L As New List(Of Long())     Public L_L As List(Of Long())Я посмотрел МСДН, и знаю, что этот оператор создает новый экземпляр класса, но как это работает - не совсем понимаю. Чем новый экземпляр отличается от обычного объявления?

  1. Доброго времени суток, многоуважаемые гуру программирования. Начал осваивать vb2010, возник вопрос: Не получается создать текстовый файл, по указанному пути - путь выбирается через использование компонента FolderBrowserDialogvb.net1 path = FolderBrowserDialog1.SelectedPathПроцедуру создания файла не прописываю, а использую такую конструкцию(используя переменную path):vb.net1 2 3 4 5 Dim file As System.IO.StreamWriter file = My.Computer.FileSystem.OpenTextFileWriter(path + "\Test.txt", False) file.WriteLine("test1") file.WriteLine("test2") file.Close()Проблема в том, что работает только на моей машине, на других либо создается только по насильному указанию "C:"(причем только этот путь), либо вообще не создает. Начальный путь для создания по умолчанию(нормально определяется) делаю через:vb.net1 path = Environment.CurrentDirectory()Потом предлагается выбрать другой путь через диалог FolderBrowserDialog Почему это может возникать? Или может я делаю что-то некорректно?)

  1. Прошу помощи людей, хорошо разбирающихся в многопоточности. Из-за зависания формы приложения во время долгого выполнения (не отвечают никакие элементы управления) пришёл к воплощению многопоточности в дело. Но если делегаты и потоки удалось освоить, то правильно завершить эти потоки никак не удаётся. К сожалению во всей литературе и на форумах не нашёл ответа на этот вопрос, везде речь о создании потока, а не о завершении во время его выполнения. Привожу сильно упрощённый вариант, где в качестве комментарий заключены различные попытки завершения потока. Одна кнопка запускает поток, другая его должна завершать. Вот как это воплотить?vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 Imports System.Threading Imports System.IO   Public Class Form1     Inherits System.Windows.Forms.Form     Public Delegate Sub ДелегатТекст(ByVal text As String)     Public Delegate Sub ДелегатЦифр(ByVal text As Integer)       Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load         Button1.Text = "Старт"         Button2.Text = "Стоп"     End Sub       ' Делегат 1     Private Sub ListBox(s As String)         If ListBox1.InvokeRequired Then             Me.Invoke(New ДелегатТекст(AddressOf ListBox), s)         Else             ListBox1.Items.Add(s)         End If     End Sub       ' Делегат 2     Private Sub Label(s As Integer)         If Label1.InvokeRequired Then             Me.Invoke(New ДелегатЦифр(AddressOf Label), s)         Else             Label1.Refresh()             Label1.Text = s         End If     End Sub       ' Процесс потока     Public Sub Процесс_потока(ByVal ИменаФайлов As System.Object) ' Процесс потока         For a = 0 To 100000             Label(a)             ListBox(a)         Next     End Sub       'Запуск потока     Public Sub Кнопка_Старт(sender As System.Object, e As System.EventArgs) Handles Button1.Click         Dim Поток As New System.Threading.Thread(AddressOf Процесс_потока)         'Поток.IsBackground = True         Поток.Start()     End Sub       'Остановка потока     Public Sub Кнопка_Стоп(sender As System.Object, e As System.EventArgs) Handles Button2.Click         'Поток.Abort()         'Me.Refresh()     End Sub       'Private Sub Закрытие(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing     '    'Поток.Abort()     '    e.Cancel = True     '    sender.hide()     '    Me.Finalize()     '    Me.Dispose()     '    Me.Close()     'End Sub End ClassБуду рад любым советам, хотя различнейшие варианты уже перепробовал...