PDA

Показать полную графическую версию : Visual Basic 2008


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [16] 17 18

Мессир
25-03-2009, 18:57
Всем привет.
Появилась проблема с написанием WEB-приложения.
Нужно отправить GET-запрос на сервер, но значение Connection в хедерах не должно присутствовать...

GET / HTTP/1.1
Host: www.google.ru
Connection: Close

Отправить запрос я коекак научился с помощью HttpWebRequest, а вот избавиться от Connection не получается.
Помогите плиз!

Admiral
27-03-2009, 21:25
Мессир доброго времени суток.
Вроде всё тривиально, указываем KeepAlive = False и Connection = Nothing но на последней записи во время выполнения сваливается с ошибкой о необходимости присваивать через свойство объекта.
Только не понятно через что по их мнению сейчас идёт присвоение?
На форуме MS вопрос по данному поводу уже подымался - Get rid of Connection header in HttpWebRequest (http://social.msdn.microsoft.com/Forums/en-US/ncl/thread/0d5a528c-f12c-4b68-8aa4-f56739ff1f0b) (использовали C#), отправили читать MSDN (здесь по-русски HttpWebRequest.Connection - свойство (http://msdn.microsoft.com/ru-ru/library/system.net.httpwebrequest.connection.aspx)), только там поданному поводу не привели пример, а сказали как присвоить/задать.
Здесь - не отрабатывает Headers.Add (http://www.gotdotnet.ru/Forums/Common/268158.aspx) вроде как поняли (в контексте другого объекта), что именно за свойство и как присваивать.
Вот так же запись в блоге Setting HTTP headers in .NET: This header must be modified using the appropriate property (http://www.clariusconsulting.net/blogs/kzu/archive/2007/07/30/29105.aspx) как раз по тексту данной ошибки.
Есть другая информация, конкретно бага в VB.NET 2008 - Assigning null to the Connection property of HttpWebRequest results in an exception (http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=371930) только там указанно что с данным столкнулись в Windows Server 2003

Imports System.Net

Module Module1

Dim myHttpWebRequest As HttpWebRequest

Sub Main()
Dim myHttpWebRequest As HttpWebRequest
myHttpWebRequest = HttpWebRequest.Create("http:\\www.google.ru")

myHttpWebRequest.Proxy = New WebProxy("127.0.0.1", 8888)
myHttpWebRequest.Method = "GET"

myHttpWebRequest.KeepAlive = False
'myHttpWebRequest.Connection = Nothing
'myHttpWebRequest.Headers.Remove(HttpRequestHeader.Connection)
myHttpWebRequest.GetResponse()

End Sub

End Module
Пускаю через прокси, что б видеть что передаётся в хедерах заголовках (лучше всё же использовать перевод, или если на то пошло писать оригинальный термин - Headers), подробнее в Взаимодействие с другими сайтами через HTTP (HttpWebRequest и HttpWebResponse) (http://www.vbstreets.ru/VBdotNET/Articles/66484.aspx)
Вопрос остаётся открытым, быть может другие участники имеющий, опыт работы с объектом HttpWebRequest, предложат своё решение по прятанью значения Connection или вовсе его не передачи, как бывает в случаи с https.

Мессир
28-03-2009, 21:54
Admiral,
Я именно так как в примере запрос и отправляю.
и с myHttpWebRequest.Connection = Nothing тоже получал ошибку...
Но значение Connection: Close в заголовке все равно остается... Мне бы от него совсем избавиться...

P.S. Из информации, которую нашел в интернете делаю вывод что HttpWebRequest нельзя отправить вообще без заголовка Connection

P.P.S. Сейчас нашел вроде способ. Пытаюсь запросы не через HttpWebRequest отправлять а с помощью ActiveX компонента AxWinsock
Вроде получается. Только все заголовки приходится прописывать переменными.. Строка запроса вырастает до невероятных размеров.. И программа не работает без файла MSWinSck.ocx.
Но это всё же лучше чем ничего.

GolfNorth
13-04-2009, 13:34
Всем привет.

Есть небольшой вопрос. При нажатии на иконку в трее форма скрывается, либо появляется. (ShowInTaskbar = False)

Private Sub NotifyIcon1_MouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseDoubleClick
If Me.Visible Then
Me.Hide()
Else
Me.Show()
End If
End Sub

Но если после скрытия, сделать активным какое-нибудь другое окно (например блокнот), то при попытке "развернуть" свою программу она окажется под этим окном (под блокнотом*). Т.е. проще говоря, я не знаю как вывести окно на первый план.

Admiral
13-04-2009, 14:22
GolfNorth, Me.TopMost = True

GolfNorth
13-04-2009, 17:38
Благодарю, но не совсем то - Me.TopMost = True оставляет окно поверх всех окон постоянно. Я же хочу сделать так, чтоб при нажатии на иконку в трее окно просто выходило на передний план, а не оставалась поверх постоянно. Таким напильным методом пока сделал:


.....
Me.Show()
Me.TopMost = True
Me.TopMost = False
.....


Т.е. делаю окно поверх всех окон, потом опцию поверх всех окон отключаю.

Admiral
13-04-2009, 18:10
GolfNorth если не охота связываться c Win32 Api это как раз решение не отходя от VB, на чём так же сошлись на форуме MS (http://social.msdn.microsoft.com/forums/en-US/winforms/thread/01d33710-ad34-4556-be17-4e6ff97b825b/)
Если всё же интересно, вот как это можно организовать применив Win32 Api функцию SetForegroundWindow
Public Class Form1
Public Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long

Private Sub '...'
'Me.TopMost = True
'Me.TopMost = False
SetForegroundWindow(Me.Handle)
End Sub

End Class

N93
13-04-2009, 18:38
Помогите пожалуйсто разобраться ) Дело в том что самоучитель у меня для Visual Basic 6, а установлен 2008 и вот возникают некоторые проблемы при освоении этого языка.
1й вопрос: Каким оператором в VB 2008 заменяется старый Print и как им пользоваться? ( В VB 6 он выводил текст на форму, а в 2008й версии походу он делает что то другое и мне приходится использовать оператор Debug.Print который выводит текст только в окно отладки ;( )
Пример:
Print "Объём="; V
End sub

2й вопрос : Как сделать что бы при завершении работы программы выполнясь какое-то действие? (У меня в книге написано что это делаеться с помощью оператора Form_Terminate , а вот в 2008мом он уже не используется) объясните плыз как пользоваться новой версией этого оператора ;)
Пример:
Form_Terminate()
MsgBox("bb world")
EndSub

Заранее спасибо )
PS: Хотя не уверен что выразился понятно.

Admiral
13-04-2009, 20:11
N93, доброго времени суток.
Это оператор в VB6 был оставлен для переходящих с QBasic, его основное предназначение печать в файл, указав после служебного символа # конкретный номер соответственно открыто файла.
В VB.NET с возможностью печатать на форме с помощью данного оператора попрощались, наиболее близкий вариант, основанный на кодах из этих тем
[2008] VB.NET Equivalent Of VB6's "Print" (http://www.vbforums.com/showthread.php?t=508401)
Прозрачность PictureBox'ов (http://www.vbnet.ru/forum/show.aspx?id=174901)
Public Class Form1
Dim j As String = 3
Public Sub WriteSomeText(ByVal g As Graphics, ByVal s As String)
Dim myFont As New Font(System.Drawing.FontFamily.GenericSansSerif, 10, FontStyle.Regular)
g.DrawString(s & Environment.NewLine, myFont, Brushes.Black, 3, j)
j = j + 12
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim V As Integer = 10
Dim Gr As Graphics = Me.CreateGraphics
WriteSomeText(Gr, "Объём =" & V.ToString)
End Sub
End Class

Debug.Print весьма удобное средство разработчика, здесь оно работает аналогично как и в VB6

По второму вопросу тут несколько проще
Private Sub Form1_HandleDestroyed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.HandleDestroyed
MsgBox("bb world")
End Sub

N93
13-04-2009, 21:02
'Public Sub WriteSomeText' , а где этот элемент брать? или его только вводить вручную?

Admiral
13-04-2009, 21:19
N93 данную процедуру нужно писать самостоятельно, причём можно задать своё имя, например PrintVB6Style
Можно вовсе обойтись без написания отдельной процедуры/функции, но тогда каждый раз где она понадобится, придётся описывать все её действия.

GolfNorth
21-04-2009, 11:42
Снова день добрый. В VB6 можно было создать на форме несколько элементов с одинаковым именем, но различным индексом. Такие элементы были очень удобные, если они выполняли схожие операции. В VB 2008 свойства Index я не нашел, можно ли все таки это реализовать?

Uzvern
21-04-2009, 12:28
Этот вопрос уже обсуждался в этой теме, на сколько я помню, не удалось это реализовать.

Admiral
21-04-2009, 13:38
GolfNorth, по данному вопросу есть новые ссылки
VB.NET: What Happened to Control Arrays (http://visualbasic.about.com/od/usingvbnet/l/bldykctrlarraya.htm)
Creating Control Arrays in Visual Basic .NET and Visual C# .NET (http://msdn.microsoft.com/en-us/library/aa289500(VS.71).aspx)
В этом отношении стало несколько сложнее по сравнению VB6 где на элементе на форме с помощью Ctrl+C и Ctrl+V можно было создать такой массив.
Uzvern, кстати 10ка не проскакивает в случаи сборки в VB 2008 SP1/.NET 3.5 SP1

Uzvern
21-04-2009, 13:47
Admiral, спасибо. Я уже решил эту проблемку :)

ChrisRoB
14-01-2010, 20:19
Сможет кто - нибудь помочь,хотя бы примерный код :Исходные данные находятся в текстовом файле "слова.txt". Каждая строка файла содержит одно слово на русском языке. Создать консольное приложение, которое выбирает из файла и выводит на экран слова, соответствующие слова оканчиваются на букву "т", и подсчитывает их количество.

Admiral
14-01-2010, 22:38
ChrisRoB потребуется умение работать с файлом
'открываем файл для чтения
Dim r As New IO.StreamReader("слова.txt", System.Text.Encoding.Default)
'проделываем необходимы действия
'...
'...и не забываем закрыть поток файла, из которого читали слова
r.Close()
читать в цикле потока отдельные строки
While (r.Peek() > -1)
Dim Line As String = r.ReadLine
End While

и анализировать каждую строку, на предмет окончания на букву т
'пример вывода последней буквы из строчки текста
System.Console.Write(Line.Chars(Line.Length - 1))

Это примерный код, а переделать его в реальный можно, если разобраться с работой каждой конструкции в отдельности.

19Garik90
26-01-2010, 09:57
Подскажите как сделать!
Создать консольное приложение, которое выводит в текстовый файл с именем числа.txt, 15 случайных чисел, значения которых находятся в интервале от 100 до 300. Каждое число выводится с отдельную строчку файла.

Admiral
26-01-2010, 11:01
19Garik90, про работу файла было чуть ранее. Пример генератора случайных чисел Generate a Random Integer Between Two Specified Values (.NET) (http://www.freevbcode.com/ShowCode.asp?ID=4451)
Вот небольшая программа
Imports System
Class RandomInConsole
Shared Sub Main(ByVal CmdArgs() As String)
If (CmdArgs.Length <> 2) And (CmdArgs.Length <> 3) Then
Console.WriteLine(Command$() & " bad using")
Return
End If
If CmdArgs(0) = CmdArgs(1) Then
Console.WriteLine(CmdArgs(0))
End If
Dim r As New Random(System.DateTime.Now.Millisecond)
If (CmdArgs.Length = 2) Then
Console.WriteLine(r.Next(CmdArgs(0), CmdArgs(1)))
Else
For i As Integer = 0 To CmdArgs(2)
Console.WriteLine(r.Next(CmdArgs(0), CmdArgs(1)))
Next
End If
End Sub
End Class
демонстрирующая работу последнего.
Использовать так RandomInConsole 100 300 15 и на экране консоли появится15 строчек с числами между 100 и 300. Для вывода в файл, средствами консоли, - RandomInConsole 100 300 15 >числа.txt.

TomSoyer
08-03-2010, 15:38
Добрый день знатокам. Подскажите пожалуйста, как в VB 2008 добавить обработчик событий мыши. Есть программа (форма) с областью для вывода графики, нужно отследить клик мыши в этой области с определением координаты клика.




© OSzone.net 2001-2012