Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Visual Basic 2008 (http://forum.oszone.net/showthread.php?t=105702)

Uzvern 24-04-2008 17:47 788404

Visual Basic 2008
 
Подскажите как сделать так : допустим, если нажать на форме правой кнопкой мыши, то вылетет MsgBox(123), а если нажать левой, то MsgBox(098).

Спасибо за внимание.

>>Блин, не дописал в названии темы : Действие при нажатии правой кнопки

Alexej77 24-04-2008 21:06 788542

В процедуре события MouseDown определяй, какая кнопка нажата, в нее передаются нужные параметры.

Uzvern 24-04-2008 21:34 788571

Alexej77, спасибо! Оперативно!
Теперь всегда буду тут спрашивать. )

P.S. Тему можно не закрывать. Я скоро вернусь с новым заданием :)

Uzvern 25-04-2008 19:42 789247

Вопрос № 2:

Можно ли как-то изменить название кнопок в MsgBox ? Например в место кнопки "Ок" - сделать кнопку "Хорошо", или все-таки придется делать дополнитьельную форму?

Admiral 25-04-2008 19:48 789253

Придётся брать форму, ибо MsgBox уже предустановлен.

Uzvern 25-04-2008 21:20 789322

Ещё вопрос :

Как открыть текстовый файл ПОЛНОСТЬЮ, а НЕПОСТРОЧНО.
В VB6 Input$(LOG(1),1) в 8 не катит :(

Admiral 25-04-2008 22:07 789342

Я в VB6 так считывал все строки
Код:

intFH=FreeFile
Open "C:\Boot.ini" For Input As intFH
Do Until EOF(IntFH)
        Line Input #intFH, strString
        strText=strText & strString & VbLf
Loop


Для VB2008 будет так
Код:

Dim fileReader As String
        fileReader = My.Computer.FileSystem.ReadAllText("C:\Boot.ini")
        MsgBox(fileReader)


Uzvern 26-04-2008 22:56 789950

Вообщем-то сабж:
Как сделать, чтобы программа вела лог?

Например у меня 3 TextBox и 1 кнопка.
Необходимо чтобы при нажатии на кнопку - программа записывала значения TextBox каждое в отдельную строчку.
Например: Нажал на кнопку в файле появились строки:

123
456
789

Нажал ещё раз, к ним прибавились ещё одни только уже через строчку и результат будет таким :

123
456
789

098
765
432

и так до бесконечности или до определенного размера файла, дальше начинается перезапись.

И ещё вопросик на счет файлов тоже:
OpenMode.Binary

чет я в VB8 в них разобраться несмог. как записывать посторчно и как считывать, тоже построчно.

Admiral 27-04-2008 01:16 790015

Между логом и того примера с трёма TextBoxами и одной кнопкой общего мало. Лог, как по мне, реализуется не так: для него даже компонент вроде есть.
Я сам не писал лог обработчик. А как вопрос решался в VB6 или там не приходилось так писать?

А предложенный пример реализуется так
Код:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        FileOpen(1, "File.log", OpenMode.Append) 'Открываем для добавления. Если файла нет, то он создаётся
        PrintLine(1, TextBox1.Text) 'Добавляем строчки в лог файл
        PrintLine(1, TextBox2.Text)
        PrintLine(1, TextBox3.Text)
        PrintLine(1, "") 'Добавляем пустую строчку
        FileClose(1) 'Желательно после всех проделанных операций закрывать файл
End Sub

OpenMode.Binary - бинарный доступ, строк как таковых нету, только группы определённых, понятных кодеру, данных. Полная аналогия как и в VB6

Построчно можно считать также как и в VB6
Код:

Dim AllText As String = "", LineOfText As String = ""
        FileOpen(1, "File.log", OpenMode.Append)
        Do Until EOF(1)
            LineOfText = LineInput(1)
            AllText = AllText & LineOfText & vbCrLf
        Loop

Что б писать построчно нужно открыть файл в режиме OutPut/Append и использовать оператор PrintLine. (см первый пример в посте)

Uzvern 27-04-2008 10:40 790122

Цитата:

Цитата Admiral
Do Until EOF(1)
LineOfText = LineInput(1)
AllText = AllText & LineOfText & vbCrLf
Loop »

А вот тут можно поподробней, кроме цыкла?!
Т.е. что значит :
EOF(1)
и кстати интереисует вопрос: что значит вот этот знак "&"

Цитата:

Цитата Admiral
OpenMode.Binary - бинарный доступ, строк как таковых нету, только группы определённых, понятных кодеру, данных. Полная аналогия как и в VB6 »

Значит нельзя например из первой сторки считать с 3 байта, а со второй с 5?

Кстати какие ещё циклы бывают, кроме:
If Then Else
End If

Do While/Until
Loop

Do
Loop While/Until

For
Next

И в каких случаях они используются (кроме тех что написал).

Admiral 27-04-2008 15:21 790255

С Праздничком!

EOF(1) - End Of File (конец файла) под номером один. Номер может быть от 1 и до 255, цикл длится от начала до конца.
& - читается как аппендикс. В данном конкретном случаи означает прибавить символы к другим символам, и сохранить строчку результат в переменной AllText.

Я так понимаю, что под "строками для бинарных файлов" подразумеваются те, которые показывает блокнот при открытии не текстового файла? Так вот, это блокнот их бьёт на строчки. На самом деле бинарный файл это одна сплошная строчка, так как в нём не включены коды "перевода каретки" (обозначается в Бейсике как vbCrLf) и Бейсик представляет такой файл как одно целое. Кодеру же в таком режиме нужно чётко знать, какие группы данных ему необходимо считать. Можно считать первые 3 байт, далее следующие за ним 5 байт. Также возможно считывание в произвольном месте, указав необходимую ячейку, с которой необходимо начинать чтение/запись.
Бинарный формат более компактный для программы, но не такой прозрачный кодеру как текстовый, на первых порах.

Насчёт первой конструкции, это не цикл. Кстати в нём возможна ещё и конструкция ElseIf (без пробела) также как и в VB 6.0 , по которому Vazdaew когда-то подсказал.

Но она может быть в роле цикла, если добавить не совсем рекомендуемый книгами, оператор GoTo:
Код:

StartCicl: A = A + 1
        If A = 10 Then
            GoTo EndCicl
        Else
            GoTo StartCicl
        End If
EndCicl: TextBox1.Text = A
        A = 0

While не выполнится ни разу, если не выполнится указанное условие;
Until выполнится хоть бы раз, а уже начиная со второго раза будет интересоваться дальнейшим условием выполнением (например, так можно установить примитивную защиту, на ознакомление с программным продуктом);
For ... Next удобный тем, что в нём изначально встроенный счетчик переменной, которую можно использовать в цикле. В других конструкциях цикла такую переменную необходимо вносить самостоятельно.

Uzvern 27-04-2008 18:25 790317

Вложений: 1
Цитата:

Цитата Admiral
& - читается как аппендикс. В данном конкретном случаи означает прибавить символы к другим символам, и сохранить строчку результат в переменной AllText. »

Т.е. это что-то типа заменителя And?

Как минимизировать форму (свернуть в пуск)? Просто нарисовал оформление, отключил все кнопки в Свойствах формы, поставил FixedSingle, убрал название формы. Вот теперь надо чтобы при нажатии на кнопку она (форма) сворачивалась в пуск и в пуск было написано, например "123" а в названии формы ничего небыло. Думая мало кто поймет смысл данного сообщения, поэтому даю скрин какой я хочу получить результат.

Или может как-то можно переписать оформление? А то стандартные кноппки (Свернуть, Развернуть, Закрыть) как-то не катят.

Admiral 27-04-2008 20:08 790358

Да.

По простому, можно в событи на сворачивания установить возврат форме заголовка с названием 123, а на разворачивании обратно прятать.

Uzvern 27-04-2008 20:15 790361

Admiral, а как это сделать? Дай код плз. + При несвернутой форме желательно тоже чтобы название было.

Как её при нажатии на кнопку ( не стандартную, а на форме ) сворачивать?

Цитата:

Цитата Admiral
Можно считать первые 3 байт, далее следующие за ним 5 байт »

И на это тоже код плз :)

Admiral 27-04-2008 20:56 790381

Код:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        WindowState = FormWindowState.Minimized
        Me.Text() = "123"
    End Sub

    Private Sub Button1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.GotFocus
        Me.Text() = ""
    End Sub

Хм.. Что б когда активным было и название было? Это уже не по простому.
Я бы взял за основу код проги для VB6 из этой статьи
Разработка окна в стиле Windows XP
Тут и стандартное окно подменяют своим, и название когда оно не свёрнуто есть.

P.S.
Код:

        Dim Some3Bytes As String
        Dim Some5Bytes As String
        FileOpen(1, "C:\Boot.ini", OpenMode.Binary)
        Some3Bytes = New String(" ", 3)
        Some5Bytes = New String(" ", 5)
        FileGet(1, Some3Bytes)
        FileGet(1, Some5Bytes, RecordNumber:=3)'читать начиная с 3го байта
        FileClose(1)

Кстати, при бинарном чтении текстовых файлов с более чем одной строчкой, в нём есть переходы каретки vbCrLf.

Uzvern 30-04-2008 16:00 792182

Как сделать чтобы при зажатии Label1 и перетаскивании мыши позиция формы менялась относительно мыши, т.е. если сказать проще, то у меня Form1.FormBorderStyle=None + есть Label1, нужно организовать, чтобы при зажатии Label1 и перетаскивании мыши, окно передвигалось в сторону мыши. Вообщем сделать функцию перетаскивания.

Uzvern 30-04-2008 16:26 792196

Вот ещё :


Timer1.Tick
Dim i
i=i+1

как сделать так : если i=четному числу(2,4,6 и т.д.), то вылетает MsgBox(123), а если не четному(1,3,5 и т.д.), то вылетет MsgBox (098)

P.S. Процесс может прдолжаться до бесконечности, проэтому прописывать все значения бесполезно

Uzvern 30-04-2008 17:36 792242

Ещё вопросик: Как при помощи VB8 можно запускать файлы, т.е. нажал на кнпку и запустился файл?!
И можно ли как-то реализовать комманду : Пуск=>Выполнить, т.е. есть текстовое поле и кнопка. Вводим например cmd, жмем на кнопку и заускается коммандная строка.

Admiral 01-05-2008 16:57 792742

Примитивно, можно сделать вот так
Код:

    Private Sub Label1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseDown
        A = 1
    End Sub
    Private Sub Label1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseMove
        If A = 1 Then
            Me.Left = Me.Left + e.X
            Me.Top = Me.Top + e.Y
        End If
    End Sub
    Private Sub Label1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseUp
        A = 0
    End Sub

Кстати в VB6 было аналогично было, но учитывалась и не пиксельная системе измерений.
Код:

'Код для VB6го
Dim A As Integer
Private Sub Label1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
A = 1
End Sub
Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If A = 1 Then
Form1.Left = Form1.Left + X \ Screen.TwipsPerPixelX
Form1.Top = Form1.Top + Y \ Screen.TwipsPerPixelX
End If
End Sub
Private Sub Label1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
A = 0
End Sub

Форма, при начале движения один раз прыгает (не далеко, но зависит от размеров Формы и Лейбла). Главное понять принцип. Просто ещё нужна проверка, куда пользователь питается её двигать.

Во первых, предложенный код не будет работать по задуму, так как объявление (считай обнуление) переменной будет каждый раз при срабатывании таймера. Вынести её надо в секцию
General Declaration

Во вторых, размещать MsgBox в событиях на Таймере не лучшая идея.
А в остальном, как и в VB6 есть такая функция Mod, результат которой - остача от деления на её аргумент. В твоём случаи код такой
Код:

Dim i
...
        If i Mod 2 = 0 Then
            MsgBox("123")
        Else
            MsgBox("098")
        End If

Так же как и в VB6, есть такая команда Shell .
Достаточно строчки кода Shell ("cmd.exe")

Рекомендую таки раздобыть таки книгу. Для того что б написать такие проги знаний VB6 вполне достаточно. Ничего .NETовского в программах нет.

Uzvern 01-05-2008 17:46 792765

ооо, спс.

Цитата:

Цитата Admiral
Во первых, предложенный код не будет работать по задуму, так как объявление (считай обнуление) переменной будет каждый раз при срабатывании таймера. Вынести её надо в секцию
General Declaration »

А вот тут можно попродробней?

Admiral 01-05-2008 17:55 792770

В VB2008м (кроме General Declaration как и в VB6, есть так называемая Form1 - Declaration) используется модель классов, сама Form1 к классу, так вот сразу здесь можно объявить переменны/константы и т.д. относящиеся ко всей форме этого класса.
Код:

Public Class Form1
    Dim A As Integer
End Class

А объявление в таймере существует только в момент исполнения/срабатывания таймера.

Uzvern 01-05-2008 17:58 792772

Цитата:

Цитата Admiral
так вот сразу здесь можно объявить переменны/константы и т.д. относящиеся ко всей форме этого класса. »

Это я знаю. Мне интерестно что там с таймером...

Admiral 01-05-2008 18:01 792773

Таймер запустился, обозначил переменную i прибавил к ней единицу и закончил работу, и никто про i так и ничего не узнал. Заново запустился и по новой i объявил…

Uzvern 01-05-2008 20:09 792810

ааа....ну это то я знаю как бы ещё с самого начала как только увидел VB.

Вот ещё сабж :

у меня 8 ТекстБосов. В каждый текстбокс генерируется произвольльное число от 0 до 1 (Int(rnd(1))). Получается, если в каждый ТекстБокс сгенерируется 1, значит во всех ТекстБоксах будет 1, а мне надо чтобы в 4 (не меньше и не больше) каких-то (произвольных) ТестБокса сгенерировалось 1 или 0, точно так же если значение стоит 5, то генерируется либо 5 "0", либо 5 "1". кажется подробно объяснил.

Кстати, Admiral, посоветуй хорший учебник по VB6 (на советском), просто у меня есть, но там все урезано по максимуму. :(

Uzvern 01-05-2008 20:33 792819

Сделал вот так, но это не вариант. Нужно чтобы высчислялось сколько "0" будет писаться, например из 9 ТекстБокса, т.е. в 9ТекстБокс ввел "6" - получил в 6 предыдущих ТекстБоксах "0"

Код:

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Randomize()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim v
        v = Int(Rnd() * 8) + 1
        If v Then
            If v = 1 Then TextBox1.Text = Int(Rnd(1))
            If v = 2 Then TextBox2.Text = Int(Rnd(1))
            If v = 3 Then TextBox3.Text = Int(Rnd(1))
            If v = 4 Then TextBox4.Text = Int(Rnd(1))
            If v = 5 Then TextBox5.Text = Int(Rnd(1))
            If v = 6 Then TextBox6.Text = Int(Rnd(1))
            If v = 7 Then TextBox7.Text = Int(Rnd(1))
            If v = 8 Then TextBox8.Text = Int(Rnd(1))
        End If
    End Sub
End Class


Uzvern 01-05-2008 21:23 792842

Как можно именять прозрачность формы?

Me.Opacity и что нужно дальше писать чтобы работало?
Просто мне нужно, если переменная i = 1 , тогда прозрачность равна 90%. Если i = 2 , тогда прозрачность равна 80% и т.д. до 0%


А нет. Все. Разобрался :) значение должно быть в виде : 90% = 0.9 ; 80% = 0.8 и т.д.

Admiral 01-05-2008 22:04 792854

Незачем генерит каждый раз, лучше один раз занести результат в переменной и потом с ней проводить операции.
Код:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Nuli As Integer
        Dim Edinicu As Integer
        Dim NulOdin As Byte
        For I As Integer = 1 To 8
            NulOdin = Rnd(1)

            If NulOdin = 0 Then
                Nuli = Nuli + 1
            ElseIf NulOdin = 1 Then
                Edinicu = Edinicu + 1
            End If

            If Nuli >= 5 Then
                NulOdin = 1
            ElseIf Edinicu >= 5 Then
                NulOdin = 0
            End If

            Select Case I
                Case 1
                    TextBox1.Text = NulOdin
                Case 2
                    TextBox2.Text = NulOdin
                Case 3
                    TextBox3.Text = NulOdin
                Case 4
                    TextBox4.Text = NulOdin
                Case 5
                    TextBox5.Text = NulOdin
                Case 6
                    TextBox6.Text = NulOdin
                Case 7
                    TextBox7.Text = NulOdin
                Case 8
                    TextBox8.Text = NulOdin
            End Select
        Next I
    End Sub

Я бы заменил всю структуру Select Case на что-то типа TextBox(I).Text = NulOdin, но здесь не получил как в VB6 получить массив элементов, может не нашёл где или не знаю как, но в VB6 при копипаст уже просится создать массив, а не просто молчаливо создавал новый тексбокс.
По остальному, я считаю нули и единицы, если количество одного из них станет равно/больше 5, то далее заполнять переменную сохраняющую результат генерации нуль/один противоположным числом.

Самоучитель Visual Basic 6.0 А. Ананьев, А. Федоров
Микаэл Хальворсон Microsoft Visual Basic 6.0 для профессионалов Шаг за шагом

Из электронных (в печатном виде продукт не выходил) приглянулся
VISUAL BASIC 6 и VBA. Для профессионалов
Ну и конечно же
Сайты о Visual Basic
+ к той теме ресурс из современности http://vbnet.ru/
Так же McDAK подсказал, как правильнее всего изучать Бейсик этой ссылкой
Конечно, историю нужно помнить, но останавливаться на ней долго не стоит нужно идти вперёд и как сказал ivank: VB6.0 и VB.Net это _абсолютно_ разные язики >>. Но в дело вмешалось Microsoft и прекращает поддержку VB 6 тем самим призвало применять vb.net там, где ранее достаточно было vb6
Так что вот ещё тема Visual_Basic 2005 выбор литературы
По 2008й ещё очень мало переведено литературы, впрочем как и по любым другим компонентам студии 2008.
Какая б не было книга, главное желание.

P.S.
На счёт прозрачности и книг, то в источнике VISUAL BASIC 6 и VBA. Для профессионалов сведенья натолкнули на мысль как использовать прозрачность в VB6 без GDI+. Официально, через файл Microsoft Visual Studio 6.0\Common\Tools\Winapi\WIN32API.TXT объявления данной функция Бейсику не полагалось, так что как бы не документированная функция для Бейсика.
Код:

'Прозрачность в Visual Basic 6
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" ( _
ByVal hwnd As Long, _
ByVal nIndex As Long) As Long

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" ( _
ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Private Declare Function SetLayeredWindowAttributes Lib "user32" ( _
ByVal hwnd As Long, _
ByVal crKey As Long, _
ByVal bAlpha As Byte, _
ByVal dwFlags As Long) As Long

Private Const GWL_EXSTYLE = (-20)
Private Const WS_EX_LAYERED = &H80000
Private Const LWA_ALPHA = &H2

Private Sub SetTrans(ByVal lhWnd As Long, ByVal lAlpha As Byte)
SetWindowLong lhWnd, GWL_EXSTYLE, GetWindowLong(lhWnd, GWL_EXSTYLE) Or WS_EX_LAYERED
SetLayeredWindowAttributes lhWnd, 0&, lAlpha, LWA_ALPHA
End Sub

Private Sub Command1_Click()
SetTrans hwnd, 100
End Sub

На практике прозрачность не очень популярная функцыя.

Uzvern 01-05-2008 22:18 792860

Вложений: 1
:o :clapping:
зачет!
А что такое Select Case? :)
И как можно добавлять значения из текстового файла в ComboBox? :happy:

Вот кстати с вашей помощью сделал игровой аппарат. Я начинающий, поэтому для меня это была одна не из лёгких задач.

Admiral 01-05-2008 22:37 792864

Select Case это выбор по определённому значению. Все равно не совсем там катит, лучше через массив работать. Кстати, там действительно необходимо такое число ТекстБоксов, может лучше подойдут массивы?
Вместо того что б писать
Цитата:

Цитата Uzvern
If v = 1 ....
If v = 2 ... »

Достаточно
Код:

Select Case v
Case 1
...
Case 2
...

Можно и целые группы значений
Код:

Dim number As Integer = 8
Select Case number
    Case 1 To 5
        Debug.WriteLine("Between 1 and 5, inclusive")
        ' The following is the only Case clause that evaluates to True.
    Case 6, 7, 8
        Debug.WriteLine("Between 6 and 8, inclusive")
    Case 9 To 10
        Debug.WriteLine("Equal to 9 or 10")
    Case Else
        Debug.WriteLine("Not between 1 and 10, inclusive")
End Select

*взято со справки по Visual Basic 2008 Express

Считать в переменную или сразу построчно считывать через свойство ComboBox1.Items().Add

Uzvern 01-05-2008 22:58 792880

Цитата:

Цитата Admiral
Считать в переменную или сразу построчно считывать через свойство ComboBox1.Items().Add »

А по подробней можно?

Считывать из переменной будет так : ComboBox1.Items().Items(*перемнная*) ? Или как-то по другому?
Что это значит : ComboBox1.Items().Add ? Добавлятьв перменную? ComboBox1.Items().Add(*перемнная*) ?

Uzvern 01-05-2008 23:30 792900

Ещё. Что означает в свойствах объекта : ImeMode? и как мне можно открыть папку (Файл открывать при помощи Shell - за это отдельное спасибо. Теперья знаю как можно создать свой авторан :biggrin:) ?

Admiral 02-05-2008 01:49 792955

Или считываем построчно файл, как в девятом посте, на тот случай если инфа ещё будет нужна в виде переменной, что б не считывать заново и не выспрашивать её у ComboBox1 тогда просто пишем, в общем случаи
Цитата:

Цитата Uzvern
ComboBox1.Items().Add(*перемнная*) »

а конкретно по примеру
ComboBox1.Items().Add(AllText)
или прямо в него в цикле записываем, правильнее сказать, добавляем строчки
Код:

Dim AllText As String = "", LineOfText As String = ""
        FileOpen(1, "File.log", OpenMode.Append)
        Do Until EOF(1)
          ComboBox1.Items().Add(LineInput(1))
        Loop

кстати можно писать и без () после Items -> ComboBox1.Items.Add(LineInput(1))

Это будет смешно, но опять же, с помощью команды Shell, есть отдельные команды специально для открытия папок, но это самое простое.
В это случаи необходимо будет передавать параметром имя "Експлорер" и папку на открытия в нём Shell("Explorer.exe C:\")
Кстати, возможно понадобится подрегулировать параметры запуска через запятую после " AppWinStyle далее точка и нужный эффект открытия.
По сути Shellу можно скормить практически тоже, что и cmd. Я его когда Winampom кормил, пока не умел музыку самостоятельно играть в проге.
Так же в VB есть файловые диалоги, специально для файлов и папок, возможно они подойдут больше. Они лежат на палитре компонентов, так что запоминать их имена не обязательно.

ImeMode, честно говоря я уже подумал что это уже .NETовское нововведение, не тут-то было, в VB6 он тоже есть. В VB2008 есть даже таблица соотношений. Но я про него не знал, ибо не было в нём надобности.
Цитата:

Цитата Справка по Visual Basic 2008 Express про IMEMode
An IME is a program that enables users to enter complex characters and symbols, such as Japanese Kanji characters, using a standard keyboard. The ImeMode property is typically set to ImeMode..::.Off for a TextBox control that is intended to only enter numeric values. The ImeMode property value is set to ImeMode..::.NoControl for the Form class.

Кратко – IME режим даёт возможность ввод японских иероглифов со стандартной клавиатуры.

На счёт игры и её дизайн, так держать, выполнена она в хакерском стиле – главное творчество, а опыт в средствах разработки даст рост.

Uzvern 02-05-2008 13:26 793143

А как можно сделать чтобы программа сворачивалась в трей? и если щелкаешь на неё правой кнопкой мыши (когда она в трее) вылезал ContextMenuStrip?

+ как сделать проверку, если в ТекстБоксе есть какие-либо символы, то они убираются из ТекстБокса, либо чтение происходит до них или после. или если существует какие-либо символы, то выполняетя определенное дейстиве, например как обычно MsgBox(123) :)

Admiral 02-05-2008 14:55 793186

С тре никогда не связывался, с ним в VB6 было больше мороки, в Vb2008м компонент на палитре есть, но нет желание работать с тре. Как работать с тре можно посмотреть вот здесь http://forums.microsoft.com/MSDN/Sho...52568&SiteID=1

Проверить равенство на пустой символ
Код:

        If TextBox1.Text = "" Then
            MsgBox("123")
        End If

До определённого символа это равноценно работы со строками, с нини лучше, стандартно забиваем в переменную и по символьно в цыкле проверяем елементы строки/массива, если найденный нужный убираем всё что заним.
Так же можно попробовать запрет ввода сего символа, что б потом не искать, например вот так можно вводить в ТекстБокс из символов только числа
Код:

   
    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        Select Case e.KeyChar
            Case "0" To "9"
            Case Else
                e.KeyChar = ""
        End Select
    End Sub


Uzvern 02-05-2008 15:24 793202

Цитата:

Цитата Admiral
С тре никогда не связывался, с ним в VB6 было больше мороки, в Vb2008м компонент на палитре есть, но нет желание работать с тре. »

Круто! Спасибо. Разобрался.

В что делаеют вот эти как бы их назвать...действия... : Handles Me.Validated и Handles Me.Validating

И как сделать проверку, если окно свернуто/развенуто/находится в нормальном состоянии.

Uzvern 02-05-2008 16:18 793227

Вот ещё сабж: как это можно реальзовать

Цитата:

Цитата ICQ
Ху***** в прогу окно текстовое , делаешь чтобы в него подгружалась интренет страница , после подгрузки страницы в окно ишешь определённый текст и всё а дальше если есть текст то ...... Нету текста .......


Admiral 02-05-2008 16:25 793229

Handles Me.Validated/Handles Me.Validating - понятия не имею, не сталкивался, в VB6 его вообще не было. Беглый просмотр справки: вроде как момент ловления событий адрессованых системой окну (новое для VB и стандарт для C++/Delphi), а также что-то про сохранение значений (от слова Value – Значения), точнее не скажу, надо столкнутся или книг умных почитать на досуге.

Именно проверка: If Me.WindowState <> FormWindowState.Minimized Then / If Me.WindowState <> FormWindowState.Maximized Then / If Me.WindowState <> FormWindowState.Normal Then
момент срабатывания свёртывания, развёртывания, нормализации нужно отловить. Возможно и с помощью Validated/Validating :happy:

Не тривиальная это задача, по крайне мере в VB6 была, нужен компонент Internet Explorer, на палитре нужно поискать.

Uzvern 02-05-2008 17:13 793257

А как сделать это? :(

в прогу окно текстовое , делаешь чтобы в него подгружалась интренет страница , после подгрузки страницы в окно ишешь определённый текст и всё а дальше если есть текст то ...... Нету текста .......

Uzvern 02-05-2008 17:34 793272

Цитата:

Цитата Admiral
Возможно и с помощью Validated/Validating »

Хм...идея! я понял как можно сделать примитивную проверку про помощи таймера :)

Код:

Public Class Form1
    Dim norm As Integer = 0, min As Integer = 0, max As Integer = 0

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Interval = 10
        Timer1.Enabled = True
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Valid_WinStat()
    End Sub

    Private Sub Valid_WinStat()
        If norm = 0 And Me.WindowState = FormWindowState.Normal Then
            norm = 1
            min = 0
            max = 0
            MsgBox(1)
        End If

        If min = 0 And Me.WindowState = FormWindowState.Minimized Then
            norm = 0
            min = 1
            max = 0
            MsgBox(2)
        End If

        If max = 0 And Me.WindowState = FormWindowState.Maximized Then
            norm = 0
            min = 0
            max = 1
            MsgBox(3)
        End If

    End Sub
End Class

Начинаю хоть что-то потихоньку понимать и соображать :)

Uzvern 02-05-2008 20:05 793340

Как добавлять и удалять значения из реестра?

Admiral 02-05-2008 21:08 793383

Компонент называется WebBrouser, находится уже на палитре.
Для vb6 приходилось подгружать Microsoft Internet Control с файла windows\system32\shdocvm.dll
Далее для VB6го -> http://www.trap17.com/index.php/how-...er_t31604.html

В проге делаешь окно Браузера и туда страницу грузить можно, но можно и текстовое но тогда страницу необходимо будет парсить, выдирать только текстовую информацию, или даже нужные слова.

Насчёт браузера ещё один абзац, мало того проги на VB2008 полностью зависят от работоспособности .NET платформы и всех заплаток к ней, нужно теперь будет учитывать что безопасность будет зависеть и от патчей к IE, именно на её движке работает этот компонент.

Насчёт таймера не очень считается надёжным решением, лучше всё таки найти функцию срабатывания, а то выходит что прога тормиш систему и комп каждые 10 милисекунд. Нужно обязательно проверить в таск менеджере на наличие всплесков.
Хотя должен сказать, что таймер, если не знаешь когда событие должно произойти, кстати называется именно событие, а действие уже на это событие вешать можно, порой очень даже выручает в качестве проверки.

Средства операций с реестром в VB6м были очень ограничены, и разрешали доступ к HKEY_CURRENT_USER\Software\VB and VBA Program Settings с помощью АПИ можно было и весь реестр проработать но для этого знаний только VB6 было явно недостаточно. Выкручивались даже через shell(“Regedit /s nastroyki.reg”), пока с АПИ не были знакомы.
В VB2008м ограничения на работу с реестром ставит только рационализм кодера, всё организовано через объект
My.Computer.Registry
Например так, прикинемся старинной прогой, написанной на VB6 и сохранимся в заповедном месте My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\VB and VBA Program Settings\MyApp", "Version", "1")
По удалению My.Computer.Registry.LocalMachine. предлагает на выбор три способа по соответствующему назначению DeleteSubKey, DeleteSubKeyTree, DeleteValue

Читать можно так
Код:

Dim readValue As Object
        readValue = My.Computer.Registry.GetValue _
        ("HKEY_CURRENT_USER\Software\MyApp", "Name", Nothing)
        MsgBox("The value is " & CStr(readValue))

*со справка по Visual Basic 2008 Express

Uzvern 02-05-2008 23:57 793508

Цитата:

Цитата Admiral
В проге делаешь окно Браузера и туда страницу грузить можно, но можно и текстовое но тогда страницу необходимо будет парсить, выдирать только текстовую информацию, или даже нужные слова. »

Во. это то что нужно! Скажи как это сделать плз, особенно получше про "или даже нужные слова" желательно на примере (сделать проект и залить его сюда) :happy:
Да, и что такое "парсить"? :)

Admiral 03-05-2008 00:29 793518

Текстовое поле не сообразит, если мы его натравим на сайт. Сайт необходимо загрузить в WebBrouser и с него повытягивать нужную текстовую информацию. Этот процесс можно назвать одним словом - парсить. В Интернете у слова парсить другая слава - вытягивать с форумов, блогов, чатов и т.д. нужную инфу ботам (е-мейлы, пароли, номера кредиток и т.д.), поисковым ботам (линки из ещё не модерируемых участков) и другим.
Про браузер, правда без парсинга, есть хорошая статья в журнале Хакер "Осел на службе людей: IE для программиста"
К сожалению, она в он-лайн режиме недоступна, так что прийдётся смотреть её в офф-лайн PDF
Расписан принцип браузеро строения, компонент имеет теже свойства, так что переписать для VB2008 не составит большого труда.

А во парсинг уже дело не тривиальное.

Uzvern 03-05-2008 00:50 793534

Как прочту, сразу все мысли сюды выложу + надо бы с парсингом разобраться...

Admiral 03-05-2008 01:08 793543

Тема не новая, она уже выходит за рамки этой, озвучивалась в названиях следующих тем
Regexp java или иной библиотеки для парсинга HTML
[решено] строковой парсинг

Есть ещё темы, в которых она обсуждалась. Поиск поможет найти подходящюю тему.

Uzvern 03-05-2008 11:59 793728

Вложений: 1
Хм..если я правильно понял, то можно сделать так : RichTextBox1.Text = WebBrowser1.DocumentText

Вообщем вот что у меня получилось из прочитаной статьи. Осталось только поянт как сделать проверку на определенное словосочетание или слово.

Uzvern 03-05-2008 19:22 793986

e.KeyChar что это значит и какие ещё бывают?

Uzvern 03-05-2008 19:43 793998

Блин, немогу поонять как сделать проверку в тексе на какое-то определенное слово (словосочетание) + надо сделать чтобы он искал это слово сочетание + какое-то определенное кол-во симолов, например читал все до словосочетания/слова : " после этого слова ничего не читается!" или определенное количество символов.

Admiral 03-05-2008 19:48 794004

Нововведение VB.NET: e это структура, как я понял, объявленная где то в недрах .NET, которая в зависимости от применения к определённому объекту даёт, вернее передаёт, разные параметры.
Самое простое это после e поставить точку, среда сама предоставит разные параметры и какие доступны в текущей ситуацыи.
Посмотрим на код в 19 посту:
на VB6 было так
Цитата:

Цитата Admiral
Код:

Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
...
End Sub

»

вроди всё устраивало всех, но увидев в VB.NET структурный способ передачи (в e в данном случаю передаётся X As Single, Y As Single)
Цитата:

Цитата Admiral
Код:

Private Sub Label1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseMove
...
End Sub

»

понимаешь на сколько это упростила жизнь при работу со сложными объектами и т.д.

Самое простое организовать цикл и проверять там символ к символу, слово к слову, а то и вовсе словосочетание.

Uzvern 03-05-2008 20:05 794019

Цитата:

Цитата Admiral
Самое простое организовать цикл и проверять там символ к символу, слово к слову, а то и вовсе словосочетание. »

Ну хотябы как это сделать?

Я чет вообще втыкнуь немогу. уже пробовал, но чет нифига не получается :(

Admiral 04-05-2008 02:39 794213

Эх... Цикл немного старый подход к сему. Я тут почитав малёк набрёл что неплохо бы задействовать свойство WebBrowser1.Document.

Кстати в апрельском номере хакера, в интерннете ещё нету, в статье "Щелкаю за бабло!" рассмотрим принцип автоматического клика C# через объект WebBrowser.

В конце статьи написано что неплохо бы написать html парсер, так что розрулив его и написав можно смело ставать автором в следующем выпуске, отправив им свою статью и прогу.

В статье приводится ссылка, может быть полезной. WebBrowserControl Автор: Олег Михайлик
По C# но тем не менее, способ работы с WebBrowser1 идентичен.

Uzvern 04-05-2008 11:02 794327

Так, с поиском мне помогли :
Код:

Dim q1 = RichTextBox1.Find("<a")
        Dim q2 = RichTextBox1.Find("</a>")
        Dim qq = q2 - q1
        MsgBox(q1 & Chr(13) & q2 & Chr(13) & qq)

ТОесьт он вычисялет с какого символа начинаеться тег ("<a"), потом вычисляет с какого начинается ("</a>"), вычитает их и получается число символов между ними. дак вот мне нужно сделать чтобы он эти символы выводил.

Uzvern 04-05-2008 17:07 794619

Либо можно использовать InStr и InStrRev (поиск группы символов )с начала и с конца строки, только непонятно как он работает, хотя нет. Похоже что он работает так же как и Find

Uzvern 04-05-2008 19:58 794725

Возможно тут какраз подойдет построчное чтение + чтение с определенного байта по определенный байт, только как это организовать?

Uzvern 04-05-2008 20:43 794743

Понял. можно при помощи функции Mid сделать чтение, ток вот щас пробую это как-то организовать....

Admiral 04-05-2008 20:48 794746

Я бы копал в сторону WebBrowser1.Document.GetElementsByTagName("a").
Код читает документ и находит все теги на а. Например <a> </a>.

P.S.
Не нужно подряд писать: пост за постом от себя. Отредактировать посты так, что б инфа была в одном, а то могут наказать.

Uzvern 04-05-2008 20:57 794754

Admiral, понял, будем копать.

Цитата:

Цитата Admiral
P.S.
Не нужно подряд писать: пост за постом от себя. Отредактировать посты так, что б инфа была в одном, а то могут наказать. »

Учтем

Кстати, как-то можно отправлять данные на сервер и получать ответ?
просто надо сделать 2 текстовых поля, 1 кнопку. Вводишь логин, пароль, жмешь кнопарь и он отправляет запрос на сервер , а м ы в свою очередь получаем ответ от сервера. Я так демаю если в текстовое поле ввобдишь текст, то в WebBrower он тоже должен меняться, т.е. как я понял нужно происывать это в код страницы. Это все реально сделать, только поянть немогу как сделать чтобы он отправлял значения на сервер при нажатии на кнопку?!

Вообщем обычная функция авторизации, только не на самой странице, а в программе, которая в свою очередь отправляет запрос.

Admiral 04-05-2008 21:14 794765

Всё реально сделать, но это ещё более широкая тема. Тут уже надо знать и уметь работать с POST и GET методами. WebBrowser это клиентская утилита, код можно изменять, но это будет локальные изменения. Как примерно работать можно узнать из статьи про взаимодействие Delphi и PHP LiveUpdate в X-стиле
Для начала нужно у себя поднять сервер того типа, который требуется для авторизации. Это можно сделать на рабочей машине или виртуалку специально для этого подогнать, так сказать для тренировок.
Кстати, с Бейсиком 2008 Експресс, идёт 2005й SQL сервер Експресс.

Uzvern 05-05-2008 16:02 795326

вообщем необходимо организовать проверку в ComboBox, т.е. в нем например 10 значений (цифры от 10 до 100). Если в вводят текст, то он автоматически ищет существует ли данное значение в ComboBox, если существует, то он выводит похожие результаты, вообщем обычная система атозаполнения.

Admiral 05-05-2008 18:27 795426

Идея следующая
Код:

Dim AllText As String
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For i As Integer = 10 To 100 Step 10
            ComboBox1.Items.Add(i)
        Next i
    End Sub

    Private Sub ComboBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ComboBox1.KeyPress
        AllText = AllText & e.KeyChar
        Dim i As Integer = 0
        While i < ComboBox1.Items.Count
            If AllText = ComboBox1.Items.Item(i) Then
                MsgBox("Present")
            End If
            i = i + 1
        End While
        ComboBox1.Text = AllText
    End Sub

это имено идея, а не реализация так как код слишком чуствителен к клавишам. Пару БекСпейсов и приложение в ауте.

Uzvern 10-05-2008 18:59 799074

Вообщем, ещё одна трабла : Необходимо написать прогу, которая бы удаляла файлы по маске (*а.txt) , либо в имени которых есть только цифры (*цифры*.txt) или только буквы (*любые буквы*.txt)

Просто решил немного поэсперементировать с создниями файла, создал прогу
Код:

Public Class Form1

    Dim i = 1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Do Until i = 0
            i = i + 1
            FileOpen(1, i & ".txt", OpenMode.Append)
            PrintLine(1, "123")
            FileClose(1)
        Loop
    End Sub
End Class

после того, как она работала 30 секунд, я её остановил, создалось несколько тысяч файлов. Вот теперь хочу сделать чтобы вторая программа удаляла все эти файлы :)


Можно как-то выдирать значения из переменной?
Например у меня перемнная

Код:

Dim i("Привет", "Hello"), z
если z =0, тогда выдирается первое значение, если z=1, выдирается второе значение. Это малый пример. мне необходимо сделать чтобы все это происходило автоматически, а не прописывать каждое значение в ручную, как например
Код:

If z = 0 Then i = "Привет"

Можно ли как-то в GoTo сделать не одно действие, а несколько?

Uzvern 11-05-2008 18:00 799678

Вложений: 1
Цитата:

Цитата Admiral
Код:

Dim readValue As Object
 readValue = My.Computer.Registry.GetValue _
 ("HKEY_CURRENT_USER\Software\MyApp", "Name", Nothing)
 MsgBox("The value is " & CStr(readValue))

»

Таким образом мы вытягиваем значение из реестра. А как-то можно их добавлять или удалять? Срочно необходимо.




Вот ещё. Вообщем выклаюываю пример, помогите разобраться и дописать.

Что необходимо :
1. Когда ничего не делаешь с главным окном, то иконка в трее и контекстное меню работают нормально. Если чуть потеребить окно, то после нажатия на иконку в трее правой кнопкой, появляются какие-то дополнительные штуки в пуске. Дак вот и и необходимо как-то убрать.

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

Admiral 11-05-2008 18:47 799713

Можно указав GoTo на первый нужный оператор, а заним без условий написав второй нужный оператор.

Там же чуть выше указано
Цитата:

Цитата Admiral
всё организовано через объект
My.Computer.Registry
... сохранимся в ...
My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\VB and VBA Program Settings\MyApp", "Version", "1")

По удалению My.Computer.Registry.LocalMachine. предлагает на выбор три способа по соответствующему назначению DeleteSubKey, DeleteSubKeyTree, DeleteValue »

К сожалению или к счастью работать с тре не приходилось как я уже говорил выше по теме, по этому практически (кодом) подсказать не смогу.

Uzvern 11-05-2008 21:07 799841

Цитата:

Цитата Admiral
DeleteSubKey, DeleteSubKeyTree, »

Какая между ними разница?

Admiral 11-05-2008 21:41 799871

DeleteSubKey - удаляет параметра, DeleteSubKeyTree - удаляет раздел.

Uzvern 17-05-2008 17:13 804959

Хм...как я понял, можно каким-то способом получить хэш. Как это можно организовать?

+ ещё : как можно сделать, чтобы когда открыта программа и реестр, то выбраная ветка/значение записывалось в программу?!

Как отменить закрытие формы?

как сделать чтобы она не закрывалась непонимаю.

Код:

Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        Dim i
        i = MsgBox("Выйти из программы?", MsgBoxStyle.YesNo Or MsgBoxStyle.Question, "Выйти?")
        Select Case i
            Case MsgBoxResult.No

        End Select
    End Sub

Как я понял, нужно копать где-то здесь : CancelButton, но это не точно

Admiral 17-05-2008 21:20 805106

Да можно, плюс от .NET
Код:

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        MsgBox(Me.GetHashCode)
    End Sub

выдаст хеш запускаемого файла согласно MD5 алгоритма в виде массива 16 байтов.

Если нужен полноценный, 128 битный вывод согласно MD5 тогда его нужно написать, вот пример Calculating an MD5 Hash in VB.net
Что бы пример работал необходимо
либо включить в диапазон имён System.Security.Cryptography (про саму службу Cryptographic Services) Project - > Properties -> References -> Imported namespaces и указать собственно System.Security.Cryptography

либо добавить к проекту новый модуль Solution Explorer ->правой кнопкой мыши Add -> Module...

туда скопировать пример, добавив в начале следующую строчку кода
Imports System.Security.Cryptography
Использование в этом случаи будет таким
Код:

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        MsgBox(getFileMd5(System.Windows.Forms.Application.ExecutablePath))
    End Sub

Про другие алгоритмы из этого пространства имён можно прочитать здесь
.NET Framework Class Library System.Security.Cryptography Namespace
Ещё по теме MD5 Class, MD5CryptoServiceProvider Class, HashAlgorithm.ComputeHash Method.

Не проще ли считать нужные строки из реестра самостоятельно? А то в предложенном варианте получается некий перехватчик с другого приложения, в данном случаи с Regedit.exe
Если идея перехватчика вдохновляет то тут .NET языки не лучший выбор, С++/Delphi лучше с этим справятся, так как нужно будет писать ещё драйвер хука.

Блокировка, такого никогда не писал, не было необходимости. По сути не уважения к пользователю, так как не всем такое понравится в виду того что оно ведёт себя как повисшие, если нет диалога. Самое простое что приходит на ум это повторный запуск приложения
Код:

    Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        Shell(System.Windows.Forms.Application.ExecutablePath)
    End Sub

Это по сути защита от дурака, не в обиду ни кому, так как перед Task Managerом, она всё же закроется. Но можно сразу же запускать чем-то другим, например через батник.
Боюсь такое не подойдёт, ведь результат роботы будет потерян. Об этом стоит подумать.
Не совсем, CancelButton лишь определяет что было не нажато в случаи если пользователь нажимал ESC, чаше всего в этом случаи на него вешают закрытия того диалога, на который предполагалось нажать Enter.

Uzvern 17-05-2008 21:59 805136

Цитата:

Цитата Admiral
Не проще ли считать нужные строки из реестра самостоятельно? »

А можно как-то считать все ветки и ключи реестра в программу? Например в TreeView?

Admiral 18-05-2008 00:27 805213

Составив цикл и комбинировав операторы чтения из реестра. Но если ветки массивные приложение будет подтормаживать.

Uzvern 18-05-2008 20:11 805673

Как отпределить : файл или папка, т.е. например Dir("C:\Program Files\") - выводит "Это папка", если Dir("C:\boot.ini") - выводит "Это файл".
Примечание : Пути могут быть любыми.

Admiral 18-05-2008 23:44 805792

По предыдущему вопросу есть готовый компонент Registry Toolkit .NET если не охота с циклами заморачиватся. Там уверяют что он может сохранить всё содержимое реестра в один XML файл. Так что осталось парсить сей файл на нужные ключи.

Я проверяю само их наличие (файла или папки), а уже потом указываю соответствующие манипуляции.
Можно анализируя ошибки возвращаемые от этих функций
Код:

Public Function FileExists(ByVal FileFullPath As String) _
      As Boolean

        Dim f As New IO.FileInfo(FileFullPath)
        Return f.Exists

    End Function

    Public Function FolderExists(ByVal FolderPath As String) _
  As Boolean

        Dim f As New IO.DirectoryInfo(FolderPath)
        Return f.Exists

    End Function

Determine if a File or a Folder Exists (ASP.NET/VB.NET)

Uzvern 19-05-2008 01:05 805831

Кстати, нашел более качественный код для перетаскивания формы без "прыжков форы по экрану"

Код:

Private b_Down As Boolean
    Private oldPoint As Point
    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
        b_Down = True
        oldPoint = e.Location
    End Sub
    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        If b_Down Then
            Me.Location = New Point(Me.Left + e.X - oldPoint.X, Me.Top + e.Y - oldPoint.Y)
        End If
    End Sub
    Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
        If b_Down Then
            Me.Location = New Point(Me.Left + e.X - oldPoint.X, Me.Top + e.Y - oldPoint.Y)
            b_Down = False
        End If
    End Sub

bbs.vbstreets.ru

Uzvern 21-05-2008 17:29 807865

Как сделать поиск определенного файла? Например мне нужно узнать где лежит файл cmd.exe или какой-нибудь другой. Необходимый путь должен выглядеть так : "C:\WINDOWS\System32\" , а не "C:\WINDOWS\System32\cmd.exe"

Admiral 21-05-2008 17:40 807873

C VB6 поставлялась даже готовая формочка SEEK.FRM.
В VB.NET 2008 я подобного не нашёл. Возможно плохо искал или она присутствует в не Експресс редакциях.
VB.Net: Recursive File Searching... организовано по принципу рекурсивного поиска.
Плюс там же организована возможность поиска по маске.
Так что можно доделать до необходимого ранее
Цитата:

Цитата Uzvern
по маске (*а.txt) ... только цифры (*цифры*.txt) или только буквы (*любые буквы*.txt) »


Uzvern 23-05-2008 16:06 809272

Можно ли как-то подгружать картинку из интернета в PictureBox ?

Admiral 23-05-2008 16:55 809308

Да.
Код:

PictureBox1.Load("http://forum.oszone.net/image.php?u=91692&dateline=1209059773")

Uzvern 23-05-2008 18:21 809371

О...круто. я так понял можно подгружать почти в любой объект, но не об этом сейчас речь.
У меня вопрос по теме : как-то можно счиать размеры картинки и по результату создать PictureBox ?

Уже ненадо. Сам разобрался...
Код:

PictureBox1.Load("http://forum.oszone.net/image.php?u=91692&dateline=1209059773")
        Me.Size = PictureBox1.Image.Size

Только возникает следующий вопрос : как сделать чтобы изображение было по середине экрана?

Admiral 23-05-2008 18:56 809393

Uzvern, считать ничего не надо.
Создаём PictureBox
Код:

Dim PictureBox1 As New PictureBox()
Добавляем его к форме, по умолчанию в верхнем левом углу.
Код:

Controls.Add(PictureBox1)
и грузим картинку,
Код:

PictureBox1.Load("C:\Windows\Blue Lace 16.bmp")
он примет её размер.

Есть обратная задача, что б картинка приняла размер компонента.
Тогда несомненно указываем его размер
Код:

PictureBox1.Size = New System.Drawing.Size(10, 20)
выбираем режим Streetch, что б картинка приняла пропорции компонента
Код:

PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
Подробнее здесь.

Цитата:

Цитата Uzvern
Me.Size = PictureBox1.Image.Size »

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

Цитата Uzvern
счиать размеры картинки и по результату создать PictureBox »

Цитата:

Цитата Uzvern
как сделать чтобы изображение было по середине экрана? »

Для предложенного варианта трактования изображения (форма изменяющая свой размер под размер картинки) это реализируэться следующим кодом
Код:

Me.Size = PictureBox1.Image.Size
Me.Left = Screen.PrimaryScreen.Bounds.Width / 2 - Me.Left / 2
Me.Top = Screen.PrimaryScreen.Bounds.Height / 2 - Me.Top / 2

См. также Get the Current Screen Resolution (VB.NET)

Uzvern 24-05-2008 20:59 810020

Можно ли как-то сделать эмуляцию нажатия клавишь?
Например запустил прогу, надал на пару кнопок, она автоматом сворачивается, открываешь например окно аси и она автоматом начинет печатать и отправлять. Возможно такое замутить?

Admiral 24-05-2008 22:48 810089

Можно. Отличают два вида нажатий: в свою прогу, через свойство нужной кнопки (или элемента) Button1.Value
и для чужой проги через упомянутый SendKey.
Только что б отправить необходимо нужное окно найти и активировать, прийдётся использовать Win32 Api
Сразу после Public Class Form1 пишем
Код:

    Declare Auto Function FindWindow Lib "USER32.DLL" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
    Declare Auto Function SetForegroundWindow Lib "USER32.DLL" (ByVal hWnd As IntPtr) As Boolean

для использования необходимых Win32 Api
Код:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim HWND As IntPtr = FindWindow(vbNullString, "ICQ")
        If HWND <> IntPtr.Zero Then
            Dim theForegroundWindow As Boolean = SetForegroundWindow(HWND)
            If theForegroundWindow = True Then
                For I As Integer = 0 To 10
                    SendKeys.SendWait(I)
                Next I
            End If
        End If
    End Sub


Uzvern 24-05-2008 22:57 810099

А я нашел более простой спопсоб :
Код:

My.Computer.Keyboard.SendKeys("A")

Admiral 24-05-2008 23:12 810115

Так у меня та же команда SendKeys, только без Нейм Спейса. А кратко как в VB6м.
И куда одна строчка кода отправит в этом случаи клавишу "A"? В активное окно, которое пользователь выберет?

Uzvern 24-05-2008 23:23 810127

Да. Ток щас ещё один вопрос возник : как сделать чтобы он отправлял не только буквы, но и нажатия клавишь "Ctrl", "Alt" и т.д. как это сделать?

Admiral 24-05-2008 23:29 810135

Писать аргумент функции SendKeys.SendWait нужно в таком виде "{Ctrl}", "{Alt"}" Ctrl - "^", Alt - "%".
Вот так нажмём Enter
SendKeys.SendWait("{Enter}")
Можно ещё и комбинации передавать, например Ctrl+V будет так
SendKeys.SendWait(^V)
По остальным комбинациям нужно смотреть их терминальные символы аналоги.

Uzvern 24-05-2008 23:36 810141

Чет не хочет он {Ctrl} воспринимать :(

Admiral 24-05-2008 23:45 810150

Uzvern, А что вообще прога должна делать при Ctrl? Это часть команды в основном. Да это я чёто уже не то пишу, писал по аналогии с Enter.
Правильно Ctrl как ^, а Alt как %
Что б ничего не напутать в будущем, вот стоит почитать SendKeys Class

Uzvern 26-05-2008 00:17 810687

Фух...все-таки я добил его и понял как отменять заверытие формы.

Код:

Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Dim ms
        ms = MsgBox("Выйти из программы?", MsgBoxStyle.YesNo, "Выйти?")
        If ms = MsgBoxResult.No Then
            e.Cancel = True
        End If
    End Sub


Admiral 26-05-2008 01:16 810712

Красиво, со вкусом. :cool:
Цитата:

Цитата Uzvern
Как отпределить : файл или папка post=805673]»[/post]

Я тут одну старую програмулину на VB6м исправлял и нашёл достаточно толковый код по вопросу.
Код:

Function FileOrDirectory(ByVal Path As String) As String
        If Dir(Path, FileAttribute.Directory) <> "" Then
            Return "Directory"
        Else
            Return "File"
        End If
End Function

Только что проверил. Работает и в VB.NET 2008м, изменив на новую константу FileAttribute.Directory вместо VB6й vbDirectory.
Я оформил в виде функции, использовать её можно так
MsgBox(FileOrDirectory("C:\Program Files\")
MsgBox(FileOrDirectory("C:\boot.ini")
Да и любые пути и файлы, впрочем Uzvern ещё тогда вокруг да около возле нужных команд шёл разговор :wink:
Цитата:

Цитата Uzvern
Dir("C:\Program Files\") - выводит "Это папка", если Dir("C:\boot.ini") - выводит "Это файл". »


Uzvern 28-05-2008 15:48 812898

1. Как можно сделать чтобы программа начинала поиск не с певого симола, а с символа последнего найденого слова ?

Например у мнея 3 слов : "String String String" их может быть сколько угодно.
Необходимо сделать чтобы она искала слово : "String". И чтобы можно было выполнять операцию вниз и вверх (вперед, назад).

2. Как создать папку?

Uzvern 30-05-2008 01:18 814098

Всем спасибо. С поиском разобрался, только пока что он работет только в одну сторону :
Код:

Public Class Form1
    Dim FindingString As String = "asdgfsdfgsdfgsdfgStringsdfgsdfgsdfgStringsdfgsdfgsdfgString"
    Dim FindString As String = "String"
    Dim FirstTemp As String = ""
    Dim SecondTemp As String = ""
    Dim ValidateTemp As Integer = 0

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If ValidateTemp = 0 Then
            ValidateTemp = 1
            FirstTemp = FindingString
            SecondTemp = Mid(FirstTemp, InStr(FirstTemp, FindString))
            FirstTemp = SecondTemp
            MsgBox(FirstTemp)
        Else
            SecondTemp = Mid(FirstTemp, InStr(FirstTemp, FindString) + Len(FindString))
            FirstTemp = SecondTemp
            SecondTemp = Mid(FirstTemp, InStr(FirstTemp, FindString))
            FirstTemp = SecondTemp
            MsgBox(FirstTemp)
        End If
    End Sub
End Class

Думал не допру как сделать, но бошка походу варит если сделал.


С созданием папок тоже разобрался (Правда приходится создавать через cmd) :

Код:

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Shell("cmd /C MD C:\123", AppWinStyle.Hide)
        End
    End Sub
End Class


Admiral 30-05-2008 03:52 814144

Можно ведь искать через Find, а чтобы можно было выполнять операцию вниз и вверх (вперед, назад) существуют операторы FindNext/FindPrevious. Можно и перебирать весь диапазона в цикле For Each.
Пример здесь Search and Highlight Text in a RichTextBox
также здесь, поиск по таблице в Excel http://www.gotdotnet.ru/LearnDotNet/...ork/22054.aspx

Проще некуда
MkDir ("С:\Новая Папка")

Uzvern 30-05-2008 12:16 814361

Кстати, что такое цикл For Each?
Чет я немогу понять как юзать FindNext/FindPrevious. Можно показать на примере? В том примере не смог ничего путного понять.

mrcnn 30-05-2008 15:18 814556

Как полностью вырубить в VB.Net

1. синтаксическую проверку во время написания программы (подчерки и т.д.)

2. всяческие исправления
a) табулирование,
b) замены маленьких букв на большие,
c) постановку скобок,
d) авто закрытие циклов,
e) автозакрытие функций
и т.п

Заранее спасибо за ответ

Admiral 30-05-2008 17:03 814658

For Each очень удобен когда на перёд не известно количество элементов, а While и Repeat не охота пристраивать, пример. Указанный Find/FindNext/FindPrevious будут работать при табличном представлении строчки, например как в Excel при указание Range.
Сдесь же можно переделать, добавив на форму ещё RichTextBox1 (для хранения строки и отображения результата) и TextBox1(для указания чего искать), указанный код к такому виду.
Код:

Public Class Form1
    Dim FindingString As String = "asdgfsdfgsdfgsdfgStringsdfgsdfgsdfgStringsdfgsdfgsdfgString"
    Dim FindString As String = "String"
    'Dim FirstTemp As String = ""
    'Dim SecondTemp As String = ""
    'Dim ValidateTemp As Integer = 0
    Dim start As Integer = 0
    Dim indexOfSearchText As Integer = 0
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        RichTextBox1.Text = FindingString
        TextBox1.Text = FindString
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'If ValidateTemp = 0 Then
        'ValidateTemp = 1
        'FirstTemp = FindingString
        'SecondTemp = Mid(FirstTemp, InStr(FirstTemp, FindString))
        'FirstTemp = SecondTemp
        'MsgBox(FirstTemp)
        'Else
        'SecondTemp = Mid(FirstTemp, InStr(FirstTemp, FindString) + Len(FindString))
        'FirstTemp = SecondTemp
        'SecondTemp = Mid(FirstTemp, InStr(FirstTemp, FindString))
        'FirstTemp = SecondTemp
        'MsgBox(FirstTemp)
        'End If
        Dim startindex As Integer = 0

        If TextBox1.Text.Length > 0 Then
            startindex = FindMyText(TextBox1.Text.Trim(), start, RichTextBox1.Text.Length)
        End If

        ' If string was found in the RichTextBox, highlight it
        If startindex >= 0 Then
            ' Set the highlight color as red
            RichTextBox1.SelectionColor = Color.Red
            ' Find the end index. End Index = number of characters in textbox
            Dim endindex As Integer = TextBox1.Text.Length
            ' Highlight the search string
            RichTextBox1.Select(startindex, endindex)
            ' mark the start position after the position of
            ' last search string
            start = startindex + endindex
        End If


    End Sub
    Public Function FindMyText(ByVal txtToSearch As String, ByVal searchStart As Integer, ByVal searchEnd As Integer) As Integer
        ' Unselect the previously searched string

        If searchStart > 0 AndAlso searchEnd > 0 AndAlso indexOfSearchText >= 0 Then
            TextBox1.Undo()
        End If

        ' Set the return value to -1 by default.
        Dim retVal As Integer = -1

        ' A valid starting index should be specified.
        ' if indexOfSearchText = -1, the end of search
        If searchStart >= 0 AndAlso indexOfSearchText >= 0 Then
            ' A valid ending index
            If searchEnd > searchStart OrElse searchEnd = -1 Then
                ' Find the position of search string in RichTextBox
                indexOfSearchText = RichTextBox1.Find(txtToSearch, searchStart, searchEnd, RichTextBoxFinds.None)
                ' Determine whether the text was found in richTextBox1.
                If indexOfSearchText <> -1 Then
                    ' Return the index to the specified search text.
                    retVal = indexOfSearchText
                End If
            End If
        End If
        Return retVal
    End Function

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        start = 0
        indexOfSearchText = 0
    End Sub

End Class

После трёх нажатий в предыдущей версии коде выскакивает ошибка.

mrcnn,
Это всё выключается здесь Project -> Options-> Text Editor Basic -> VB Specific

mrcnn 30-05-2008 17:33 814674

>>Это всё выключается здесь Project -> Options-> Text Editor Basic -> VB Specific

Отключения подчерков нет.

Uzvern 30-05-2008 21:45 814817

Как работать с Error , Err и т.д. + как выводить справку, после нажатия в MsgBox на кнопку "Справка"

Admiral 31-05-2008 15:07 815153

mrcnn, да, верно, но всё другое отключается. Про подчёркивания я уточнил, когда увидел тему Visual Studio .Net. Вероятно нужно в умной книге почитать, в Helpе так не находится. Искал по UnderLine Speell Check

Uzvern, если в коде нужно обработать одну строчку, в случаи ошибки, и ошибка одна, то можно используя конструкцию On Error Resume Next. Можно её использовать и не обрабатывать ошибки, оставив эту строчку в начале кода, так сказать пусть прога использует без ошибочную философию.
Код:

On Error Resume Next
        '...
        If Err.Number = <Номер ошибки> Then
            '...Сообщаем что такая вот ошибка или делаем альтернативу, план Б
        End If

Вместо Ifа конечно же можно использовать любой переборщик ошибок, например как case со следующего примера. Его имеет смысл использовать если у нас прям целый проблемный блок, и в котором при малейшой ошибке стоит покинуть и в обработчике разобраться что стряслось и объяснить пользователю в чём дело.
Код:

On Error GoTo Corrector
'...

Corrector:
Select Case Err.Number
            Case <Номер ошибки>
                '...Сообщаем что такая вот ошибка или делаем альтернативу, план Б
            Case Else 'Когда не предвиденная ошибка
                '...Так вот и так, отправте нам что привело к тому что выскочила такая ошибка
        End Select

Узнать описание ошибки можно через код
Код:

On Error Resume Next
Err.Raise 6  ' Raise an overflow error иливместо 6ти указываем интересующий номер
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear  ' Clear the error.

Ну и наконец-то в VB добавили конструкцию try, которая лично мне знакома с Delphi, я в начале поста упомянул о без проблемных/безошибочных прогах, так вот эта конструкция пробует(в переводе с try) выполнять ту часть кода, которая может быть потенциально ошибочной.
Код:

    Try
    Catch ex As Exception
    End Try

В случаи чего мы предвидим потенциальную ошибку, через Catch ex, и обрабатываем.
Ещё раз повторюсь, что в VB6м данной конструкции не было.

С Helpom не всё в порядке, вроде бы всё просто
Код:

MsgBox("Nead Help", MsgBoxStyle.MsgBoxHelp, "Little Help or Not")
Но функция MsgBox не возвращает никаких значений, если нажали Help. Нужно искать другой подход.
В VB6м сама структура
Код:

Function MsgBox(Prompt, [Buttons As VbMsgBoxStyle = vbOKOnly], [Title], [HelpFile], [Context]) As VbMsgBoxResult    Member of VBA.Interaction
просит указать файл справки, да и раздел справки.

Не сказал бы, что это уж очень популярная фича, вызов из MsgBoxа справки. Если интерфейс интуитивно понятный то и справка не нужна. Тем не менее, правила хорошего тона обязывают её существование и дистрибуцию вместе с программой.

mrcnn 31-05-2008 15:33 815181

Что за фигню (в каких единицах) мне возвращает Math.Acos и как эту фигню превратить в градусы?

Мне нужно значение в градусах, полученное из косинуса

Admiral 31-05-2008 15:57 815198

mrcnn, MSDN нету? Ставится даже c Express редакцией. Причём на неё можно поставить полный не Express.

Всё верно результата возвращает в specified number.
Math.Acos Method

Uzvern 01-06-2008 15:16 815914

Что делает эта комманда :
Код:

TextBox1.Undo()
?

Admiral 01-06-2008 15:46 815946

Тоже что и комбинация Ctrl+Z в большинстве программ, возвращает предыдущие значение.
Только я, когда с примера переписывал, ошибся. Это свойство нужно применять к RichTextBox1, после того как всё найдено и подкрашено, что б убрать покраснение.

Uzvern 03-06-2008 20:38 817660

Что делает эта функция :
Код:

CStr()

Admiral 03-06-2008 21:55 817730

CStr Function
Функция CStr

Uzvern 03-06-2008 22:46 817770

Сорри. Затупил :rolleyes:

Uzvern 08-06-2008 19:23 821626

Как прописать в тексе ковычки " ?

Все. Разобрался -)

Код:

***.Text = """"
Как можно сделать прозрачный цвет у формы?

И как можно написать самое6 просто приложение : Клиент - Клиент, клиент - сервер

mrcnn 08-06-2008 19:57 821644

Аж четыре кавычки. Нормально реализовать изобреаттелям языка было видимо лень. Лучше бы в виде эскейп последовательностей сделали а не в виде какой-то фигни. Эскейп-последовательности гораздо важнее подсветки синтаксиса и синтаксической проверки на лету. В бейсике все через ж. Лучше на асме писать, чем на бейсике. Там хоть и муторно, но нет таких дбл конструкций как в бейсике и компиляторы нормальная и среда, которая не делает дбл почерки и подчерки. .




Второй способ вставить кавычку Chr(34) этот способ предпочтительнее

Третий способ использовать хак: (replace(string,"'","''"))

Четвертый способ:
Подключить регулярные выражения

Imports System.Text.RegularExpressions
Regex.Escape("\"")

Admiral 08-06-2008 20:32 821659

Ну почему же сразу не придумали? Просто VB программисту проще, наверное, действовать методом проб и ошибок: ага две кавычке как служебные, три как ошибка, ну а на четыре компиллер наконец поймёт чего надобно.
Есть конечно же эстетическое решение: с помощью функции Char у которой есть метод ConvertFromUtf32, перевода ASCII кода в соответствующий табличный стиль. Кто таблицу не помнит, здесь всё же участник помнил, есть функция Asc, которая возвращает код символа согласно таблице ASCII. Да придётся ещё раз забомбить четыре раза кавычки, что б узнать ответ - MsgBox(Asc("""")), кому понравились они и хочется писать запутанный код и вовсе может использовать что-то на подобии MsgBox(Char.ConvertFromUtf32(Asc(""""))), а эстетам всё же предложу MsgBox(Char.ConvertFromUtf32(34)), где 34 это код кавычек.

mrcnn, для C# (скрин из которого был в этой теме) по подчёркиваниям решение уже найдено в теме.

Uzvern 09-06-2008 19:53 822473

Помогите плз. Вообщем необходимо вывести сообщение с первой буквой из каждой строки.
Код:

Public Class Form1
    Dim i1 As String
    Dim i2 As Long = -1
    Dim i3 As String
    Dim i4 As String
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        i1 = RichTextBox1.Text
        Do Until i2 = RichTextBox1.Lines.Length
            i2 = i2 + 1
            i3 = RichTextBox1.Lines(i2).Substring(0, 1)
            i4 = i3 & Chr(13)
        Loop
        MsgBox(i4)
    End Sub
End Class

Не могу понять почему не хочет. + Со списком жестких дисков такое же.

Код:

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim h As Integer = -1
        Do Until h = My.Computer.FileSystem.Drives.Count
            h = h + 1
            RichTextBox1.Text = RichTextBox1.Text & My.Computer.FileSystem.Drives(h).Name
        Loop
    End Sub
End Class


Admiral 09-06-2008 22:48 822594

Цитата:

Цитата Uzvern
Dim h As Integer = -1 »

Из каких соображений -1?
-1 всё же нужно, но в другом месте
Код:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim h As Integer = 0 REM а вдруг дисков вообще нет :), из концепции безопасного кода
        Do Until h = My.Computer.FileSystem.Drives.Count - 1 REM нумерация с нуля, так что на один элемент меньше
            h = h + 1
            RichTextBox1.Text = RichTextBox1.Text & My.Computer.FileSystem.Drives(h).Name
        Loop
    End Sub


Uzvern 09-06-2008 23:21 822619

Цитата:

Цитата Admiral
REM »

Это что такое?

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

Admiral 10-06-2008 01:03 822675

Uzvern, REM это ж основа всего, коменты в коде после этого можно писать дальше по строчки. Тоже что и ' но в топике немного сливается, так что запостил через этот оператор.

Если он вне программы, то есть форма не активна, то без написания драйвер хука никак. А так с помощью свойства e., оно уже встречалось в теме.

Uzvern 10-06-2008 11:09 822831

Мне нужно отловить положение курсора когда текст печатается.

Можешь показать на примере? Просто я пробовал с е., чет нифига не лоучается.

Admiral 10-06-2008 17:04 823090

А ну это другое дело, только тогда в этом случаи терминологически надо говорить про положения каретки, а не курсора (координаты которого передаёт e.)
Код:

  Private Sub RichTextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
        Dim Position As Integer = Me.RichTextBox1.SelectionStart
        Dim Line As Integer = Me.RichTextBox1.GetLineFromCharIndex(Position)
        Dim Col As Integer = Position - Me.RichTextBox1.GetFirstCharIndexOfCurrentLine
        Label1.Text = Position & " " & Line & " " & Col
    End Sub

А насчёт глобальной отловки курсора, то теперь (в отличии от VB6) не надо никакого Хука (по видимому он уже в нёдрах НЕТА), так что отловить его возможно, даже когда окно не активно или когда его и вовсе нет
Код:

Label1.Text = MousePosition.X & " " & MousePosition.Y

Uzvern 10-06-2008 19:55 823189

Как сделать цвету формы прозрачным?

Admiral 11-06-2008 03:17 823382

Вроде .NET добавил такую возможности компонентам (контролям), только для формы не предусмотрели :)
И выходит что код Me.BackColor = Color.Transparent на выполнении вызывает ошибку
Цитата:

Control does not support transparent background colors.
Чуть по сложнее будет так
Код:

Me.BackColor = System.Drawing.Color.Magenta
Me.TransparencyKey = System.Drawing.Color.Magenta

Только теперь в самом деле окно будет прозрачное, даже для кликов мыши (но не для клавы). Элементы, если не указав им цвет явно, тоже станут прозрачными, так что для каждого елемента прийдётся прописать BackColor (TransparencyKey по желанию).

Если лёгкие пути не для тебя и/или влом прописывать для всех элементов их цвета, то тогда есть арсенал реализации VB6/Delphi6 и не такого частного случая.

Техника программирования сложных окон в Visual Basic Генератор кода Form GENERATOR 1.5 по принципу описанному в статьи.
Впервые о технологии написания, а вернее рисования, нестандартных окон я узнал их этой статьи

Delphi: Безбашенные окна. Несмотря на то, что там описано для Delphi я всё же рекомендую к чтению, поскольку описаны нюансы работы с такими окнами.

Admiral 11-06-2008 13:35 823651

Весьма странно, что начинает прыгать и не выполнять выборку по Case. Тем не менее, ответ по избавлении от 9 Or 10 Or 12 Or 13 одним махом
Case Else
GoTo generaciya
Остальные комментарии в коде
Код:

Public Class Form1
    Dim i As Integer
    '  Dim v As Integer = 0 REM Оно нужно только для цикла, пускай там и создаётся
'...
Private Sub ret()
      'Do Until v = 20 REM Чем обусловлен выбор именно этого цикла?
        'v = v + 1 REM Если использовать For данной строчки не потребуется
        REM For и буду использовать
        For v As Integer = 0 To 20
generaciya:
            i = Int(Rnd() * 190 + 1)
            Select Case i
                Case 1 To 8
                    RichTextBox1.Text = RichTextBox1.Text & Chr(i)
                Case 11
                    RichTextBox1.Text = RichTextBox1.Text & Chr(i)
                Case 14 To 190
                    RichTextBox1.Text = RichTextBox1.Text & Chr(i)
                    'Case 9 Or 10 Or 12 Or 13 REM Если интересуют значение только 1-8, 11, 14-190 то здесь выборку не стоит делать, а написать
                Case Else
                    GoTo generaciya
            End Select
        Next v
    End Sub
'...

Хороший пример, что б показать как можно комбинировать операторы-комментаторы. Rem я использую - когда явно пишу комментарии, а ' - для отключения строчек кода.

Uzvern 11-06-2008 18:16 823880

Admiral, неа. Все-равно 10-ка проскакивает! :(

Admiral 11-06-2008 19:03 823909

Да уж. Первый самый код должен был нормально отработать, но идеологически боролся с последствиями, а не с причиной.
Вот следующий код ни шагу не даст i пока не убедится, что она не принимает нежелательных значений
Код:

        For v As Integer = 0 To 20
            Do
            i = Int(Rnd() * 190 + 1)
            Loop Until (i <> 9) And (i <> 10) And (i <> 12) And (i <> 13)
            If i = 10 Then Debug.Print(i)Rem это контрольная строчка для проверки через Immediate Window появления значения i 10
REM подробнее про это окно здесь ->http://msdn.microsoft.com/en-us/library/f177hahy(VS.80).aspx
            RichTextBox1.Text = RichTextBox1.Text & Chr(i)
        Next v


Uzvern 11-06-2008 20:45 823978

Admiral, ты не поверишь...но она все-равно проскакивает! :laugh:
Вот, залью проект. Может чего с кодом накосматил...
http://slil.ru/25889104

Объясни пожалуйса поподробней что это и как это можно использовать
Код:

Debug.Print()

mrcnn 11-06-2008 21:36 824010

Uzvern
Критерий правильности: отсутствие появления перехода на новую строку?
Отключи тогда еще 11

Код:

Loop Until (i <> 9) And (i <> 10) And (i <> 12) And (i <> 13) And  (i <> 11)

Debug.Print работать будет по видимому только в поздних студиях

Admiral 11-06-2008 22:33 824063

mrcnn, 11 нужно ибо Uzvern указал этот вариант в выборке (см. код по Select Case)
Debug.Print по полной работает и в этой и в предыдущих и покидать среду разработки, это удобное средство отладки, в будущих версиях языка врятле будет.
Я знаю её по 6й в более ранних я не работал, но такая возможность описана в новшествах к VB5, плюс есть указание, что раньше (до VB5) окно называлось Debug, так что такая возможность скорей всего была ещё с первой версии.
В коде я указал ссылку, которая объясняет где смотреть появление этой переменной.

Uzvern, перед тем как отправлять код, я пару раз прогнал его и 10ка мне ни разу не выскочила (не напечаталась по Debug.Print в Immediate Window). Раз такое дело, то самым радикальным шагом будет использовать два генератора: до 10ки и после, что б даже не происходило её случайная генерация.

Код сейчас посмотрю, отпишусь через редактирование.

Uzvern 11-06-2008 23:19 824106

Admiral, Debug.Print(i) - не пашет. Проверено!

Как организовать поиск определенного файла на компе? Например, "1.txt" - мне нужно узнать где он лежит.

Как предварительно получить размер файла скачиваемого из интернета и в добавок ( как получить размер файла находящегося на компьютере ) и как можно остановить/прервать скачивание?

Как отследить нажатие клавиши/клавишь, если программа находится в свернутом состоянии?

Во я вам работы привалил :blush:

Admiral 12-06-2008 02:36 824216

Цитата:

Цитата Uzvern
Admiral, Debug.Print(i) - не пашет. Проверено! »

Внимание на скриншот,

собственно сам оператор пашет, это есть и на видео, не пашет установка i<>10
Для решения этого момента, как писал выше использовать два генератора до 10 и после. Очевидно, что ещё первый код работал по алгоритму, а вина выборки скорей всего зарыта в недрах .NET - Тогда и два генератора не помогут. Может в .NET 3.5 SP1 возьмутся за это, может в MicroSoft клип отправить?
Как ещё один вариант, строку кода Randomize() может поместить в саму процедуру ret()?

Цитата:

Цитата Uzvern
Как организовать поиск определенного файла на компе? Например, "1.txt" - мне нужно узнать где он лежит. »

Или
Цитата:

Цитата Uzvern
Как сделать поиск определенного файла? »

Ответ

Это уже немного надо знать WEB запросы, простенькие примеры такого не дают.
Simple web File download in VB.NET .Net 2003
VB.NET - Code Samples - Ping,Upload and Download using vb.net vb.net 2005
Тем немее на них стоит посмотреть, что б разобраться на более сложном
Downloading files in .Net with all informations: progressbar, download speed, supports cancel and resume

Размер локального файла можно узнать так
Код:

Dim information As System.IO.FileInfo
information = My.Computer.FileSystem.GetFileInfo("C:\Boot.ini")
MsgBox(information.Length)

ответ в байтах.
How to: Get Information About a File in Visual Basic

Что ж нету в .NET хука на все случаи жизни. Так что для поимки нажатий клавишей его придётся писать.
Managing Low-Level Keyboard Hooks in VB .NET
Однако, софт подобного типа (отловить, подменить из бекграунда) стоит писать на C\C++ (возможно на Delphi), в крайнем случаи на C#.

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

mrcnn 12-06-2008 07:59 824250

Цитата:

Debug.Print по полной работает и в этой и в предыдущих и покидать среду разработки, это удобное средство отладки, в будущих версиях языка врятле будет.
Нету такого метода Print. Ссылки на мсдн не надо.
10-ка там не выскакивает, я прогонял в отладчике, она появляется только в цикле.
10 и 9 отлавливаются.
с чего вы решили что 10-ка не отлавливается?

Uzvern 12-06-2008 16:36 824486

Цитата:

Цитата Admiral
Downloading files in .Net with all informations: progressbar, download speed, supports cancel and resume »

Цитата:

Цитата Admiral
Simple web File download in VB.NET .Net 2003 »

Как обычно, ничего толком поять не смог. Можно на примере ? :happy:

mrcnn 12-06-2008 18:05 824557

Что именно не получается припаять к тем примерам?

Uzvern 12-06-2008 19:34 824667

mrcnn, все. Желательно бы показать на примере, а пример (сами проекты/прект) прилепить сюда. Как обычно делает адмирал
читать дальше »
(только он полностью расписаный код сюда выкладывает, а тут желательно прект)
за что ему отдельное СПАСИБО!

Цитата:

Цитата mrcnn
с чего вы решили что 10-ка не отлавливается? »

Качаем и смотрим вложение данного поста.

Цитата:

Цитата Admiral
собственно сам оператор пашет, это есть и на видео, не пашет установка i<>10 »

Сорри. Не так выразился. Я имел ввиду : ...ео, не пашет установка i<>10...

Как сделать, чтобы программа была поверх всех окон оО

Как можно исправить это : "это" нахoдится тут (Сама программа и используемая картинка) (что-то с прозрачностью формы)
читать дальше »


Код:

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim i As Color = System.Drawing.Color.Magenta
        Me.BackColor = i
        Me.TransparencyKey = i
    End Sub

    Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
        End
    End Sub
End Class


Admiral 13-06-2008 05:01 824892

ОффТоп=>
читать дальше »
mrcnn, нет так и суда нет :happy: . Не буду, линки по этому поводу есть уже в теме.
Я честно прогнал до подтормаживания приложения ту кнопки, перед тем как давать код и десятка не встречалась. С видео, предоставленного Uzvern, спорить не собираюсь, тем более там так красочно выражается это окно, что трудно не заметить. :biggrin:
Свою догадку, о причинах сего поведения, я уже высказал. А собственно чему удивляться, если в языке запланировано одно, а в реализации могут ошибаться. В соседней теме по С, чётко компилятор халтурит. Так у Сишников есть широкий выбор, а для Visual Basic - microsoft является монополистом. Есть реализации от других компаний, но они не настолько известны. Выбор есть только между разными версиями:VB1-6 и VB.NET2002-2008).

Uzvern, а зачем отдельный контрол для изображения (это я про PictureBox)?
Как один из вариантов, корректно отображающих прозрачность
Код:

        Me.TransparencyKey = Me.BackColor
        Dim Img As Bitmap = Bitmap.FromFile("Используемое изображение.png")
        Me.BackgroundImage = Img

System.Drawing.Color.Magenta – это цвет "прозрачности", то есть в ресурсах им раскрашивают невидимые области, для достижения прикольного эффекта. На его месте может быть любой другой, выбранный художником-кодером из вариантов от VB2008, а если этим не заморачиватся то главное что б Me.TransparencyKey = Me.BackColor
Кстати глюк имеет место http://support.microsoft.com/kb/822495 но как видно в ракурсе не отображения при цветности больше 24, то есть для альфа канала.
Окна поверх всех будет так Me.TopMost = True
(я уже видел вопрос перед этим, просто забыл отписаться по этому поводу)


Согласен, что консольный .NET2003 проект немного запутан, ну а 2008й в полном сборе: по ссылке и проект, и собранный вариант и код на странице указан, ещё с комментариями и объяснениями. Так что экспериментировать...

Uzvern 13-06-2008 09:25 824932

А что на счет примеров с проектом :happy:
читать дальше »

Код с прозрачностью не пашет! Все осталось как и было (фиолетовая обводка)
Код:

Public Class Form1

    Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
        End
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.BackColor = System.Drawing.Color.Magenta
        Me.TransparencyKey = Me.BackColor
        Dim Img As Bitmap = Bitmap.FromFile("1.png")
        Me.BackgroundImage = Img
    End Sub
End Class

Результат такой же как и в 127 посте

Admiral 13-06-2008 13:21 825044

Вложений: 1
ОффТоп=>
читать дальше »
Что б написать качалку такого плана (с указанными требованиями) нужно потратить много времени, а намного быстрее будет пройти у них регистрацию, что б скачать указанный пример.
А насчёт небольшого, NET2003 примера, то модуль я закрепил. Не сложно будет разобраться – нужно создать консольный проект и занести прикреплённый модуль отсюда. На сайте действительно была ошибка, они с ASP.NET один запрос WebRequestFactory взяли , что в VB.NET отсутствует, он просто краткий - WebRequest. Более подробно про сам объект HttpWebRequest..::.Connection Property

Конечно же он будет фиолетовым, в коде вед чётко указанно
Цитата:

Цитата Uzvern
Me.BackColor = System.Drawing.Color.Magenta >>

а я в коде чётко написал первой строчкой
Цитата:

Цитата Admiral
Me.TransparencyKey = Me.BackColor>>

и всё с палитрой после этого. Внимательность и ничего больше. Зачем Me.BackColor что-то указывать? Достаточно трёх строчек с предыдущего поста.

Uzvern 13-06-2008 15:29 825156

Цитата:

Цитата Admiral
пройти у них регистрацию, что б скачать указанный пример »

Скачать - скачал, а как его в проект запихать незнаю :(

Uzvern 14-06-2008 19:53 826091

Понял как можно избавится от
Код:

Chr(10) и тому подобной не нужной "гадости"
Код:

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        RichTextBox1.Text = ""
        If TextBox1.Text <> "" And IsNumeric(TextBox1.Text) = True Then
            TextBox1.Text = Int(TextBox1.Text)
            For v As Integer = 1 To TextBox1.Text
nachalo:
                Dim i As Integer
                i = Int(Rnd() * 190 + 1)
                Select Case i
                    Case 1 To 8 REM ну тут все как обычно
                        RichTextBox1.Text = RichTextBox1.Text & Chr(i)
                    Case 14 To 190 REM и тут
                        RichTextBox1.Text = RichTextBox1.Text & Chr(i)
                        'Решение
                    Case Else
                        RichTextBox1.Text = RichTextBox1.Text & ""
                        Do Until RichTextBox1.Text.Length = TextBox1.Text
                            Debug.Print(i)
                            GoTo nachalo
                        '/Решение
                      Loop
                End Select
            Next v
            Me.Text = RichTextBox1.Text.Length
      Else
            MsgBox("Вы не ввели значение, либо значение не является числом.", MsgBoxStyle.Critical, "Введите значение!")
        End If
    End Sub
End Class


Uzvern 17-06-2008 23:25 828669

Как-то можно запустить VB , чтобы сразу же появлялось окно с выбором нужного пректа, возможно с каким-то параметром или как-то по другому.

Admiral 18-06-2008 00:20 828702

Да можно. Загрузка последнего загруженного проекта настраивается так
Tools - > Options... -> Startup - > At startup: -> Load Last loaded solution

Uzvern 18-06-2008 19:48 829466

Нет, а можно чтобы окно выбора создаваемого проекта появилось?! Как на скрине.

Admiral 18-06-2008 20:25 829494

Тот же путь только последний пункт Show New Project dialog box
Информация по другим пунктам доступна в статье Startup, Environment, Options Dialog Box

Uzvern 22-06-2008 21:38 832552

Как вывести полный список файлов и папок, находящихся в указаной папке/системном диске/съемном носителе?!
И как можно отследить подключение съемного диска.

Admiral 22-06-2008 21:55 832561

List of all files and folders on drive
How to detect Insertion/Removal of a USB device

Uzvern 24-06-2008 14:07 833599

Убрал глюк с NotifyIcon и ContextMenuStrip.
Оказывается, надо было в свойствах NotifyIcon указать нужный ContextMenuStrip и прописать его вызов в код.

Код:

    Dim MD As Boolean = False

    Private Sub NotifyIcon1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseDown
        If MouseButtons = Windows.Forms.MouseButtons.Right Then
            MD = True
        Else
            MD = False
        End If
    End Sub

    Private Sub NotifyIcon1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseUp
        If MD = True Then
            NotifyIcon1.ContextMenuStrip.Show()
            MD = False
        Else
            MD = False
        End If
    End Sub


Uzvern 25-06-2008 10:34 834391

Можно показать на примере цикл For Each, на каком-нмбудь понятном примере. просто пробовал разобраться - бестолку. :(

Кстати, для авторизации на сайте/форуме, нашел код :
Код:

WebBrowser1.Navigate("//forum.oszone.net/index.php")


    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        WebBrowser1.Document.GetElementById("vb_login_username").InnerText = "ЛОГИН"
        WebBrowser1.Document.GetElementById("vb_login_password").InnerText = "ПАРОЛЬ"

        Dim theElementCollection As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("input")
        For Each curElement As HtmlElement In theElementCollection
            If curElement.GetAttribute("value").Equals("Войти") Then
                curElement.InvokeMember("click")
            End If
        Next
End Sub

За код спасибо http://bbs.vbstreets.ru/

Admiral 25-06-2008 16:08 834757

Самый близкий к For Each ... Next цикл For ... Next вот на примере их сравнивание и покажу разницу.
For Each ... Next удобен, когда необходимо проделать действия с каждым элементом массива, не задумываясь о количестве его элементов
Код:

Sub AddNamesToList(ByVal ParamArray NamesArray() As Object)
Dim x As Object
For Each x In NamesArray
ListBox1.Items.Add(x)
Next x
End Sub

после этого в коде пишем AddNamesToList("A", "B", ...."Пока не надоест ")
Для цикла на базе с For ... Next потребуется уточнения про количество параметров, которые передаются
Код:

Sub AddNamesToList(ByRef I As Integer, ByVal ParamArray NamesArray() As Object)
Dim x As Integer
        For x = ListBox1.Items.Count + 1 To ListBox1.Items.Count + I
        ‘ListBox1.Items.Add(NamesArray(Rem...))
        Next x
End Sub

AddNamesToList(3, "A", "B", "Теперь указанно, что три элемента ")
и намного больше времени на адаптацию самого кода добавления в список, что б получить тот же эффект что и в предыдущем коде.
С другой стороны иногда требуется сделать выборку не по всем элементам массива, тогда удобнее For ... Next. Да можно и в For Each ... Next указать через If/Select Case и т.д. какие элементы интересуют, но это уже усложнения, проще взять For ... Next, например указывая только чётные элементы
Код:

For iCounter = 0 to 10 Step 2
...
Next iCounter

Вот ещё два примера сравнений двух структур
Код:

Dim i As Integer
For i = 0 To ListBox1.Items.Count - 1
{ statements to process item ListBox1.Items(i) }
Next
...
Dim itm As Object
For Each itm In ListBox1.Items
{ process the current item, represented by the itm variable }
Next

http://www.askit.ru/custom/progr_adm...ript_loops.htm страница хоть и про VbScript но объяснение про циклы катит.

Uzvern 26-06-2008 18:00 835702

У меня есть перменная.
Код:

Dim AllDrive() As ArrayList
Мне нужно сделать, чтобы в неё добавлялись пареметры. Как это сделать?

Admiral 26-06-2008 18:59 835756

Код:

        AllDrive.Add("a")
        AllDrive.Add("b")
        AllDrive.Add("c")
'...

ArrayList.Item Property

Uzvern 26-06-2008 21:45 835874

Код:

Debug.Print("Element {0} is ""{1}""", 2, stringList(2))
Хы, прикольная штука. А её ещё где-нить можно применить? :unsure:

Как сделать, чтобы курсор был по середине кнопки?

Admiral 27-06-2008 18:18 836580

http://msdn.microsoft.com/en-us/libr...ics.debug.aspx
Только в отладке разработчиком, пользователю оно не доступно.

Это когда проводишь курсором на кнопке, что б он по центру выскакивал, или когда где-то на форме и нужно указать его положение по центру кнопки?
В любом случаи команда
Windows.Forms.Cursor.Position = New System.Drawing.Point(Button1.Location.X + Me.Location.X + 50, Button1.Location.Y + Me.Location.Y + 30)
в первом случаи её нужно указать в событии на движении по нужной кнопке, а во втором по движению на форме.
Вспомогательные координаты необходимо будет подрегулировать в зависимости от размеров кнопки.

Uzvern 27-06-2008 19:48 836663

Admiral, о, спасибо. Вот ещё задачка :

Как мне во вторую колонку добавить текст?
Код:

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim ListView1 As New ListView

        Controls.Add(ListView1)
        ListView1.Dock = DockStyle.Fill
        ListView1.View = View.Details

        With ListView1.Items
            .Add("1")
            .Add("2")
            .Add("3")
            .Add("4")
            .Add("5")
        End With

        ListView1.Columns.Add("1", 70)
        ListView1.Columns.Add("2", 70)

    End Sub
End Class

На первый вопрос - решение найдено :
читать дальше »
Код:

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim ListView1 As New ListView

        Controls.Add(ListView1)
        ListView1.Dock = DockStyle.Fill
        ListView1.View = View.Details

        ListView1.Columns.Add("Name", 50)
        ListView1.Columns.Add("Item : Name", 78)

        Dim Col As ListViewItem

        Col = ListView1.Items.Add("A")
        Col.SubItems.AddRange(New String() {"Item : " & ListView1.Items.Item(ListView1.Items.Count - 1).Text})
        Col = ListView1.Items.Add("B")
        Col.SubItems.AddRange(New String() {"Item : " & ListView1.Items.Item(ListView1.Items.Count - 1).Text})
        Col = ListView1.Items.Add("C")
        Col.SubItems.AddRange(New String() {"Item : " & ListView1.Items.Item(ListView1.Items.Count - 1).Text})
        Col = ListView1.Items.Add("D")
        Col.SubItems.AddRange(New String() {"Item : " & ListView1.Items.Item(ListView1.Items.Count - 1).Text})
        Col = ListView1.Items.Add("E")
        Col.SubItems.AddRange(New String() {"Item : " & ListView1.Items.Item(ListView1.Items.Count - 1).Text})


    End Sub
End Class



Как можно создать ярлык?

Admiral 28-06-2008 16:00 837200

Ещё как вариант
Код:

With ListView1
            .Items(0).SubItems.Add("1")
            .Items(1).SubItems.Add("2")
            .Items(2).SubItems.Add("3")
            .Items(3).SubItems.Add("4")
            .Items(4).SubItems.Add("5")
End With

Повторное использования кода добавит указанные значения в третью колонку, при условии, что она существует. В VB.NET принято заполняют ряды, а потом разбивать их по колонкам.
ListView.Columns Property

Create shortcuts with a .NET application*
*Примечание

Вроде простое дело - создать ярлык. Но встроенного в .Net Framework средства нет. Во всяком случаи я такой возможности не нашёл, и приходится использовать COM объэкт. В литературе использование COM в .NET крайне не рекомендуется в связи с повышенным ресурсо потреблением. Может при создании ярлыка оно и не заметно, но в больших проектах использования связки COM в .NET жутко забивает оперативную память, так что можно использовать такие приложения как бенчмарк.

Не использовать COM в .NET при создании скриншота можно, если воспользоваться мастером создания установщиков
Walkthrough: Deploying a Windows-based Application
How to build an installer by using Visual Basic .NET or Visual Basic 2005
How to create shortcuts for a Visual Studio 2005 or Visual Studio .NET setup and deployment project
Adding and Removing Shortcuts in the File System Editor
Доступен в не Express редакциях.

Uzvern 02-07-2008 16:48 840481

Как узнать номер выделеного эллемента в ListView1?

Admiral 02-07-2008 20:24 840760

ListView1.SelectedItems.Item(0)

Uzvern 03-07-2008 17:55 841510

Admiral, этот код позволяет щелкнуть 1 раз, дальше выдает ошибку :
Код:

InvalidArgument=Value of '0' is not valid for 'index'. Parameter name: index
Код:

Public Class Form1

    Private Sub ListView1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.SelectedIndexChanged
        Me.Text = ListView1.SelectedItems.Item(0).Text
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        With ListView1.Items
            For a As Integer = 1 To 10
                .Add(a)
            Next
        End With
    End Sub
End Class


Admiral 03-07-2008 18:09 841520

Нужна проверка
If ListView1.SelectedItems.Count > 0 Then
перед Me.Text = ListView1.SelectedItems.Item(0).Text
Кстати приведённый выше код показывает значение выделенного элемента, а следующий
Me.Text = ListView1.SelectedItems.Item(0).Index
номер элемента.

Uzvern 04-07-2008 14:06 842188

Можно ли как-то изменить стандартное выпадающее меню (что-нибудь добавить, убрать или вообще сделать свое) ?

Admiral 04-07-2008 14:19 842200

Uzvern, простым способом нет. Это как ситуация с MsgBox. Писать своё или юзать какие-то недокументированные АПИ.

Uzvern 04-07-2008 14:40 842223

Admiral, а как можно свое написать? :) Примеры есть?
Кстати, можно ли как-то уменьшить объем потребления RAM ?

Admiral 04-07-2008 15:28 842260

У меня таких примеров нету, но они должны быть в Интернете. Нужен правильный перевод этого меню - Drop Down не совсем подходит ибо показывает ASP.NET решения.

Лирическое отступление
Скажите спасибо .NET Frameworks за нещадное потребление оперативы, в VB6 большинство прог укладывались в 10 Мб употребления ОЗУ, а то и меньше, ведь постоянно нужная библиотека msvbvm60.dll занимает от силы 1,32 MB. А в нете даже самый примитивный уже более 20 МБ.

Память и .Net
Определить сколько в действительности употребляет прога написанная с использование .NET можно исходя из рекомендаций в этой статье How much memory does my .NET application use?
В этом топике How to minimize memory usage автор задался аналогичным вопросом, когда перенёс свой код с VB6/COM на VB.Net
А здесь задан идентичный вопрос VB.Net Application using too much Memory
Другие статьи про память и .NET, а также написание программ

Можно уменьшить момент большого употребления увеличив скорость работы
Скорость Reflection .Net
Эта статья должна помочь создать более быстрые и менее ресурсоемкие приложения
GC в .NET
Так же про работу автоматики
Автоматическое управление памятью в .NET
И общие рекомендации по кодированию As is или история о том как не надо писать код

Uzvern 06-07-2008 21:41 844121

Можно ли как-то сворачивать код? Не сами дейсвия (Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load), а код, например вот этот :
Код:

        ListViewAllDrives.Columns.Add("Имя", 75)
        ListViewAllDrives.Columns.Add("Тип", 75)

        ListViewHardDrives.Columns.Add("Имя", 75)
        ListViewHardDrives.Columns.Add("Тип", 75)

        ListViewRemovable.Columns.Add("Имя", 75)
        ListViewRemovable.Columns.Add("Тип", 75)

Типа как с
Код:

#Region "123"
#End Region


Admiral 06-07-2008 23:56 844217

Через редакторы это можно делать визуально, а кодом это возможно, если назвать скрываемый блок как-то. Только это должен быть цельный блок (вместе с объявлением Sub, Function, Procedyre...), а не часть блока.

Uzvern 07-07-2008 20:19 845103

Как можно вывести состояние BackgroundWorker1 (работает или нет (True False) ) в Me.Text

Admiral 07-07-2008 22:11 845221

Me.Text = BackgroundWorker1.WorkerReportsProgress
Так же про использование BackgroundWorker есть статья Using the BackgroundWorker Component in .NET 2 applications правда там код на C#, но пример визуально ясен.

Uzvern 11-07-2008 23:56 849287

Можно ли как-то выдрать значение из Консоли?

Admiral 12-07-2008 01:16 849343

А что подразумевается под словом "консоль"? При написании консольных приложений или выдирать значения, которые попадают в системную консоль?
Для консольного приложения есть команда Console.ReadLine, входящая в семейство Console Methods Другой пример для консольного приложения в теме C#.NET&&обработка нажатия клавиш
Для выдирание их системной консоли, наверное понадобится написать какой-то хук.

maximliss 12-07-2008 13:02 849557

Подскажите новичку в VB,Есть форма на ней PictureBox и CommandButton,как при клике загрузить файл GIF или JPEG с интернета?Как я понимаю,его сначало нужно загрузить на диск?и потом отобразить в PictureBox или я не прав?Как все это сделать пока не знаю!Помогите.

Admiral 12-07-2008 15:08 849638

Нужный код размещён в посте №76, полный код для кнопки будет следующим.
Код:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        PictureBox1.Load("http://forum.oszone.net/images/avatars/another/085x.gif")
    End Sub

На будущие стоит пользоваться поиском в теме

maximliss 12-07-2008 15:31 849662

Выдает ошибку "end statement" - Handles- выделяет.если я не ошибаюсь это из Visual Basic .NET?
пост № 76 не помог,наверняка я что то делаю не правильно....(((

Admiral 12-07-2008 16:13 849702

maximliss, ОК, вот полный код
Цитата:

Цитата Form1.vb
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
PictureBox1.Load("http://forum.oszone.net/images/avatars/another/085x.gif")
End Sub
End Class

если ошибка повторится и/или будет другая, то к следующему посту стоит прикрепит проэкт в архиве или только сам файл Form1.vb

maximliss 12-07-2008 16:57 849743

спасибо за помощь,сейчас буду разбиратся

Uzvern 12-07-2008 22:49 849956

Цитата:

Цитата Admiral
А что подразумевается под словом "консоль"? При написании консольных приложений или выдирать значения, которые попадают в системную консоль?
Для консольного приложения есть команда Console.ReadLine, входящая в семейство Console Methods Другой пример для консольного приложения в теме C#.NET&&обработка нажатия клавиш
Для выдирание их системной консоли, наверное понадобится написать какой-то хук. »

ну добавленое с помощью
Код:

Debug.Print("")

Admiral 13-07-2008 08:00 850099

Оно добавляется только в среде, отдельный ехе бинарник ничего не постит и не консоль это вовсе. Ничто не мешает использовать переменную в качестве вывода, тогда её значение не потребуется выцеплять.

Uzvern 13-07-2008 10:45 850134

Как можно получить список интеренет соединений и по возможности запустить выбраное (например если добавлено в ListBox)

Можно ли как-то подгрузить картинку в текстовое поле (RichTextBox), например : "Тут идет текст, а тут (картинка)" Типа как подгружаются смайлики в асе

Как в RichTextBox сделать, чтобы каждое слово начиналось с заглавной буквы, а все последующие строчные?
Подразумеваю, что это делает Trim, но как это реализовать не знаю.

Admiral 13-07-2008 22:40 850579

Disabling network connection using vb.net 2005

Для VB6 проще было Insert a picture into a RichTextBox control, статью стоит взять на вооружения может удастца перевести на VB.NET до конца, текущий VB.NET
вариант не хочет фуричить
Код:

    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As String) As Long
    Private Const WM_PASTE = &H302
    Sub InsertPictureInRichTextBox(ByVal RTB As RichTextBox, ByVal Picture As Image)
        ' copy into the clipboard
        ' Copy the picture into the clipboard.
        Clipboard.Clear()
        Clipboard.SetImage(Picture)
        ' paste into the RichTextBox control
        SendMessage(RTB.Handle, WM_PASTE, 0, 0)
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        InsertPictureInRichTextBox(RichTextBox1, Image.FromFile("c:\winnt\coffee bean.bmp"))
    End Sub

В помощь VB.NET приходит технология OLE Inserting images into a RichTextBox control (the OLE way)
adding a picture in a RichTextBox

Код:

    Dim wordstart As Integer
    Dim wordend As Integer
    Private Sub RichTextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles RichTextBox1.KeyUp
        If e.KeyCode = Keys.Space Then
            wordend = RichTextBox1.SelectionStart
            RichTextBox1.Select(wordstart, wordend - wordstart)
            RichTextBox1.SelectedText = TitleCase(RichTextBox1.SelectedText)
            RichTextBox1.SelectionStart = wordend
            wordstart = wordend
        End If
    End Sub
    Friend Shared Function TitleCase(ByVal unformattedString As String) As String
        Dim myTI As System.Globalization.TextInfo = New System.Globalization.CultureInfo("en-US", False).TextInfo
        Return myTI.ToTitleCase(unformattedString)
    End Function

How to convert to uppercase
http://www.vbdotnetforums.com/showthread.php?t=7150

Uzvern 13-07-2008 22:52 850588

Как можно сделать корректное отображение символов в RichTextBox?
подгружаю текст из файла ивот такая беда

Как полусить SubItems значение выделеного элемента ?
Сделал так :
Код:

ListView1.SelectedItems.Item(0).SubItems.Item(1).Text
Помогло :)

Admiral 18-07-2008 04:10 854954

Сохранять файл в кодировке Юникод (Unicode) и будет всё ОК

Uzvern 18-07-2008 15:29 855451

Сделал липкое окно
Код:

    Sub SW(ByVal Pixels As Integer)
        Dim SH = Screen.PrimaryScreen.WorkingArea.Height
        Dim SW = Screen.PrimaryScreen.WorkingArea.Width

        Dim MAH = Me.Location.Y + Me.Height
        Dim MAW = Me.Location.X + Me.Width

        'Верхняя строна
        If Me.Location.Y - Pixels <= Pixels And Me.Location.Y + Pixels > 0 - Pixels Then
            Me.Location = New Point(Me.Location.X, 0)
        End If
        '/Верхняя строна

        'Нижняя сторона
        If SH - MAH <= Pixels And SH - MAH + Pixels > 0 - Pixels Then
            Me.Location = New Point(Me.Location.X, SH - Me.Height)
        End If
        '/Нижняя сторона

        'Правая сторона
        If SW - MAW <= Pixels And SW - MAW + Pixels > 0 - Pixels Then
            Me.Location = New Point(SW - Me.Width, Me.Location.Y)
        End If
        '/Правая сторона

        'Левая сторона
        If Me.Location.X - Pixels <= Pixels And Me.Location.X + Pixels > 0 - Pixels Then
            Me.Location = New Point(0, Me.Location.Y)
        End If
        '/Левая

    End Sub

Как то можно убрать потрясывания во время "приклеивания окна"?

Цитата:

Цитата Admiral
Юникод (Unicode) и будет всё ОК »

Как можно перекодировать файл при помощи VB?

Admiral 19-07-2008 00:53 855913

Возможно через таймер дать плавный переход по координатам?
Я имел ввиду в блокноте пересохранить текстовый файл как Юникод.

В проекте всё правильно считывает из тхт файла.
Если так интересно тогда вот Конвертация ANSI to UNICODE (или UTF)

Uzvern 19-07-2008 14:33 856210

Как в одном окне можно создать ещё одно?

Admiral 19-07-2008 14:36 856213

Это называется MDI интерфейс.
Creating Multiple-Document Interface (MDI) Applications

Uzvern 19-07-2008 23:37 856549

Admiral, чет у меня с кодом косяк какой-то.

Код:

Dim ch1 As New Child1
Dim ch2 As New Child2

Child(х) подчеркивает

Вопрос решен. Моя тупость.

А можно как-то цвет поменять? С серого на белый например?!

Admiral 21-07-2008 15:07 857593

Да.
Код:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SetBackGroundColorOfMDIForm()
    End Sub
    Private Sub SetBackGroundColorOfMDIForm()
        Dim ctl As Control

        ' Loop through controls, 
        ' looking for controls of MdiClient type.
        For Each ctl In Me.Controls
            If TypeOf (ctl) Is MdiClient Then

                ' If the control is the correct type,
                ' change the color.
                ctl.BackColor = System.Drawing.Color.White
            End If
        Next
    End Sub

Form.IsMdiContainer Property

Uzvern 22-07-2008 21:15 858702

Как можно автоматичски добавлять действия, например :
Код:

Public Class Form1

    Dim TabControl As New TabControl
    Dim Num As Integer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Me.Controls.Add(TabControl)
        Me.TabControl.Dock = DockStyle.Fill
        Me.TabControl.Multiline = True

        Do Until TabControl.TabCount = 8
            Num += 1
            TabControl.TabPages.Add("TabPage" & Num)
        Loop

        For x As Integer = 0 To TabControl.TabCount - 1
            Dim b As New Button
            TabControl.TabPages(x).Controls.Add(b)
            b.Dock = DockStyle.Bottom
            b.Name = "Button" & x + 1
            b.Text = b.Name
        Next

    End Sub
End Class

Мне необходимо сделать, чтобы при нажатии на кнопку (на каждой вкладке), вылетало сообщение с названием вкладки.

Admiral 23-07-2008 12:37 859102

Основная часть динамики уже написана, осталось приделать динамическое добавления событий и поставленная задача будет выполнена
Код:

        For x As Integer = 0 To TabControl.TabCount - 1
            Dim b As New Button
            AddHandler b.Click, AddressOf Button_Click
REM...дальше код с предыдущего поста
        Next

    End Sub
REM этих строчек не было ранее, именно они отвечают за действия кнопок
    Protected Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs)
        If TypeOf (sender) Is Button Then ' check to make sure that the sender is actually a Button
            MsgBox(TabControl.SelectedTab.Text.ToString())
        End If
    End Sub

Ссылки по вопросу
как узнать имя объекта вызвавшего событие?
How to: Consume Events in a Windows Forms Application
Set dynamic control's properties

И немного истории How To Dynamically Add Controls to a Form with Visual Basic 6.0

Uzvern 23-07-2008 18:17 859344

Admiral, а если я добавлю ещё TextBox и при нажатии на кнопку, чтобы вылетало сообщение с текстом из текст бокса. Как это сделать?

Admiral 23-07-2008 19:33 859391

Я так понимаю TextBox на каждую вкладку
Код:

        For x As Integer = 0 To TabControl.TabCount - 1
REM ... код из предыдущего поста
            Dim t As New TextBox
            TabControl.TabPages(x).Controls.Add(t)
            t.Name = "TextBox" & x + 1
            t.Text = 1000 * (x + 1)
        Next

    End Sub

    Protected Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs)
        If TypeOf (sender) Is Button Then ' check to make sure that the sender is actually a Button
            MsgBox(TabControl.SelectedTab.Controls.Item(1).Text) 'Говорим что бы вывело текст контрола размещённого в выделенной вкладке по индексом 1, под 0 ушла кнопка
        End If
    End Sub


Uzvern 23-07-2008 22:16 859518

Admiral, блин, точняк там же можно выводить из контрола. чет я совсем затупил. Спасибо, Чувак! :cool:

Uzvern 24-07-2008 01:19 859646

А можно как-то писать и использовать в VB dll?

Admiral 24-07-2008 01:56 859658

С переходом на NET VB утратил базовую возможность писать ActiveX DLL.
Писать всё же можно, но среда аналогичной вкладки Придётся немного помудрить, что б сделать всё же DLL Writing an ActiveX Control in VB.NET
И их правильное использования.
DLL на VB.NET (точка входа)
Microsoft всё же надеется что среди богатых возможностей .NET FrameWorks найдутся классы которые прямо из коробки подойдут к проге, так что б смысла писать DLL у разработчиков не было.
В тоже время наибольший интерес представляют уже написанные DLL (не обязательно на NET). И в этой теме, когда необходимо было использовать WinApi функции, как раз использовались вызовы из системных библиотек.
Есть удобное средство позволяющие узнать, как вызывать функции из написанных DLL (тех что входят в базу проги, преимущественно системные, так что WinAPI) ApiViewer (en)

Uzvern 24-07-2008 13:02 859913

Как можно добавить таймер на форму?
Код:

        Dim Timer As New Timer
        Controls.Add(Timer)

так не хочет.

Там вроде как-то по другому надо добавлять и не только с таймером так

Admiral 24-07-2008 13:56 859971

Таймер, в отличие от VB6, помещается не на саму форму, а среда сама показывает, что он есть в проекте, но не добавляет его на форму.
Timer Class (по ссылке пример)
По указанным причинам так нельзя, кроме таймера, MainMenu или ContextMenu так как эти контроли не входят в класс Control.ControlCollection. >>

Uzvern 24-07-2008 23:12 860416

Как можно перевсти фокус с одно текст бокста на другой, ну или на кнопку например.
Все. нашел :
Код:

.Focus()
Как можно сделать обрашение к нужному текст боксу по кнопке, например :
Код:

Public Class Form1

    Dim x As Integer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        x += 1
        TextBox(x).Focus()
    End Sub
End Class

что-то в этом роде.

Все сделал :
Код:

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim n As Integer
        Dim l As Integer
        Dim s As Integer
        Do Until n = 4
            n += 1
            Dim tb As New TextBox
            tb.Size = New Size(55, 20)
            tb.Location = New Point(12 + l + s, 12)
            tb.MaxLength = 4
            s = tb.Size.Width
            l = tb.Location.X
            AddHandler tb.TextChanged, AddressOf T
            Controls.Add(tb)
            Me.Size = New Size(tb.Location.X + 30 + 55, 78)
        Loop
    End Sub

    Dim v As TextBox
    Dim ti As Integer

    Private Sub T(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If TypeOf sender Is TextBox Then
            v = sender
            If v.Text.Length = 4 Then
                ti = v.TabIndex
                ti += 1
                Debug.Print(ti)
                Try
nachalo:            If TypeOf Controls.Item(ti) Is TextBox Then
                        Debug.Print(ti)
                        Controls.Item(ti).Focus()
                        Debug.Print(Controls.Item(ti).Name)
                    Else
                        ti += 1
                        GoTo nachalo
                    End If
                Catch
                    Dim TB As TextBox
                    For Each x As TextBox In Controls
                        If TypeOf x Is TextBox Then
                            TB = x
                            TB.Enabled = False
                        End If
                    Next
                End Try
            End If
        End If
    End Sub
End Class

Правда надо немного подшаманить, чтобы ошибки не лезли

Не могу понять как обращаться к объектам из BackgroundWorker. Прочитал этот пост, но ничего путного не нашел.
вот сам код :
Код:

На форму кинул 3 TextBox'a, BackgroundWorker, ProgressBar, Кнопку

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        BackgroundWorker1.RunWorkerAsync()
    End Sub

    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        If TextBox1.Text <> "" And TextBox2.Text <> "" Then
            If TextBox1.Text <> "0" Or TextBox2.Text <> "0" Then
                TextBox3.Text = Math.Round(Val(TextBox1.Text / TextBox2.Text / 60), 2) & " мин."На это сторке начинает "орать" : "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "TextBox3" не из того потока, в котором он был создан."
            End If
        End If
    End Sub

    Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
        ProgressBar1.Value = e.ProgressPercentage
    End Sub
End Class

Как работать с модулями?

Uzvern 25-07-2008 23:52 861223

Hash
А можно как-то получить обратный результат?
Код:

"qwertyuiopasdfgh".GetHashCode = 1377243374
А мне бы хотелось наоборот получить не "1377243374", а "qwertyuiopasdfgh"

Admiral 26-07-2008 00:50 861267

Получить символы по его хешу не возможно в принципе!

Хеш (Hash) - комбинация символов, полученная с помощью безвозвратных математических операций. Если б можно было, то все пароли зная их хешы, которые не скрывают, на раз бы раскрывались. >>
В Интернете есть сайты которые составляют хеш таблицы соответствий, что б легче было "вспоминать" пароли.

Uzvern 26-07-2008 01:54 861287

Admiral, нет. это то я знаю. Я просто думал, что именно вот эту операцию .GetHashCode можно как-то перекодировать и получить ответ. Теперь понял, что нет :)

Uzvern 29-07-2008 01:19 863220

Покажите примеры с Drug and Drop из Windows.

Admiral 29-07-2008 02:09 863241


http://www.vb-helper.com/howto_net_drag_drop.html
http://www.java2s.com/Code/VB/GUI/Drag-Drop.htm
Your First Drag and Drop
Introduction to TreeView Drag and Drop (VB.NET)
Ну и по русски
Drag & Drop .NET

Uzvern 30-07-2008 01:08 864060

Как можно отфильтровать значение на определенные знаки, например : значение "1-2\3-4\5 необходимо отфильтровать по знакам " "-", "\" и т.п. , чтобы вернулось знаение "12345". Пробовал Trim, но чет он не помогает.

Пришлось писать функцию :
Код:

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim Stri As String = "1-2\3-4\5"
        MsgBox(RemChr(Stri, "-", "\"))
        End
    End Sub

    Function RemChr(ByVal Text As String, ByVal ParamArray Chars() As String) As String
        Dim EndString As String = Text
        Dim TempString As String
        For CI As Integer = 0 To Chars.Length - 1
            For TI As Integer = 0 To EndString.Length - 1
                If EndString.Substring(TI, 1) <> Chars(CI) Then
                    TempString &= EndString.Substring(TI, 1)
                End If
            Next
            EndString = TempString
            TempString = Nothing
        Next
        Return EndString
    End Function
End Class


mrcnn 30-07-2008 09:30 864236

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


Код:

Imports System.Text.RegularExpressions
Dim RegexObj as Regex = New Regex("regularexpression").
RegexObj.IsMatch("subject") - поиск
RegexObj.Replace("subject", "replacement") - замена

Дальнейшее см.
http://www.regular-expressions.info/dotnet.html

Uzvern 30-07-2008 14:54 864427

Как-то можно зашифровать свой проект, чтобы его нельзя было открыть например в Reflector'e?

mrcnn 30-07-2008 15:15 864446

Чтобы скрыть содержимое от не профессионалов, можно упаковать exe. Есть много упаковщиков типа UPX, ASPProtect и т.д. Я однако точно не знаю, работают ли они с .NET файлами. Если понадобится взломать, взломают и расшифруют, тупо сделают дамп из памяти.

См. http://madebits.com/netz/
Ключевое слово "exe NET packer"

Admiral 30-07-2008 15:24 864451

Виртуальная машина на страже порядка
Цитата:

Цитата GPcH (_www.dotfix.net) Виртуальная машина на страже порядка Хакер, номер 77(май 2005), стр. 107
Виртуальная машина .NET
... Интерпретируемый язык этой платформы называется IL (сокращение от Intermediate Language) и значительно лучше реализован, чем бэйсиковский p-код. На данный момент существуют несколько декомпиляторов IL (в том числе и моя любимая Ida Pro – прим. Горл), которые без особого геморроя переведут exe-файл твоей программы в исходник, поэтому не защита программы получится, а наоборот. Хотя авторы компилятора тоже не лохи, они сделали две примочки, чтобы ухудшить жизнь крэкеру: >>
1.обфускатор IL кода, способный убрать всю лишнюю информацию из EXE. После такой обработки исследовать программу будет крайне сложно даже с декомпилятором.
2.программу для конвертирования IL кода в обычный native-код. Но по слухам эта примочка очень сильно глючит, и то, что твоя программа после конвертирования будет нормально работать, зависит лишь от фазы луны :).

Обе эти программки входят в состав Visual Studio последних версий, так что не забывай о них. >>

собственно про применение Reflector тоже сказано
Штурм зимнего .net'а
Недетское вскрытие .NET
.NET секретам Добыча исходного кода приложений
Карманное рукоприкладствоp->Подопытный № 1 (patch)

Uzvern - mrcnn прав, если понадобится код то взломают, так что сильно усложнять программу защитой тоже не стоит: ресурсов от этого она начинает брать больше.

Uzvern 30-07-2008 15:50 864474

Как можно включить CapsLock, чтобы это отразилось и на клавиатуре (загорелась/потухла лампочка).
Код:

SendKeys.SendWait("{CapsLock}")
заставляет её моргать, т.е. она включается и тут же выключается
В чем различие между :
Код:

SendKeys.Send и SendKeys.SendWait
Как можно добавлять в программу параметры для запуска?

mrcnn 30-07-2008 18:54 864600

http://forums.msdn.microsoft.com/en-...-a101cdfecf4e/

Код:

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
Call keybd_event(System.Windows.Forms.Keys.CapsLock, &H14, 1, 0) 'включить
Call keybd_event(System.Windows.Forms.Keys.CapsLock, &H14, 3, 0) 'отключить (или наоборот)

Цитата:

Как можно добавлять в программу параметры для запуска?
http://vbcity.com/forums/topic.asp?tid=65476
http://www.devx.com/dotnet/Article/10115
http://www.devx.com/dotnet/Article/10115/0/page/2 (там еще несколько страниц)

Admiral 30-07-2008 20:45 864656

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

Проверяя параметры запуска My.Application.CommandLineArgs(0..n)
пример здесь
есть ещё и другой вариант используя конструкцию вида
Код:

    Public Sub Main(ByVal args() As String)
        ' Pull the commandline arguments out of the args() variable
    End Sub


Uzvern 30-07-2008 23:09 864740

В чем различие между :
Код:

ByVal и ByRef
Private Sub, Sub, Function, Private Function и т.д. какие ещё бывают


Admiral 31-07-2008 01:34 864820

ByVal – означает по конкретному значению (в контексте определённая переменная); ByRef - по ссылке (адресу) в памяти на место где размещается конкретное значение.
ByVal vs ByRef
Private Sub - приватная процедура, её вызов возможен только из текущего модуля (vb файла)
Sub - процедура, вызывается на определённое событие
Function - тоже что и процедура, но обязана явно возвращать значение (ключевое слово Return)
Private Function - тоже что и Private Sub с той лишь разницей что есть явный возврат значения.
Declared Elements in Visual Basic
http://www.intuit.ru/department/office/vba2000/6/ для VBA правда но определения подходят даже к VB.NET

Uzvern 31-07-2008 02:09 864832

Как работать с
Код:

Buffer
как я понял, он существует для хранения информации или для чего-то другого?

Admiral 31-07-2008 02:47 864837

Есть пример на MSDN как работать с Buffer Class
Цитата:

Цитата Buffer Class: Remarks
Buffer only affects arrays of primitive types: Boolean, Char, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64, IntPtr, UIntPtr, Single, and Double; this class does not apply to objects. Each primitive type is treated as a series of bytes without regard to any behavior or limitation associated with the primitive type. >>

Он нужен для хранения массивов примитивных типов: Boolean, Char, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64, IntPtr, UIntPtr, Single, и Double. Созданные объекты в нём хранить нельзя.

mrcnn 01-08-2008 19:06 866048

а в нете можно асм использовать?

Admiral 01-08-2008 22:02 866153

Я видел один вариант (доступный лишь в С#).
Использование Assembler в .NET
Самое интересное автор искал возможность заюзать его в Visual C++ входящему в .NET студии.

Uzvern 04-08-2008 00:10 867208

Как узнать регистр нужного символа и при необходимости его сменить?!

Admiral 04-08-2008 01:09 867223

Узнать номер символа в строчке, которая например, располагается в TextBox1: малого регистра (vbLowerCase) и большого (vbUpperCase) можно так
Код:

Format(TextBox1.Text, vbLowerCase)
Format(TextBox1.Text, vbUpperCase)

Что б привести всю строку к малому или большому регистру нужно писать так
Код:

TextBox1.Text = StrConv(TextBox1.Text, VbStrConv.Lowercase)
TextBox1.Text = StrConv(TextBox1.Text, VbStrConv.Uppercase)

Немного из истории функции Format в VB6.

Uzvern 04-08-2008 01:23 867229

Admiral, а где можно почитать про все функции
Код:

Vb*****
Желательно на советском языке.

Delirium 04-08-2008 01:50 867241

Uzvern, неплохой хелп в MS Excel встроенный. И на русском и понятно. Это если на советском. А если на англ - то MSDN :)

Admiral 04-08-2008 01:54 867242

Vb*****, это константны языка, а в данном случаи константа VbStrConv.***** используется как параметр функции StrConv.
Что б все и на русском это сложно, вот описание 162* на текущий момент функций Visual Basic .NET
Значения констант, на английском правда, http://vb2py.sourceforge.net/docs/vb...t-of-constants

Delirium 04-08-2008 01:57 867244

Admiral, зачем вам MSDN, такое впечатление, что все ссылки и остальное в голове держишь :)

Admiral 04-08-2008 02:06 867246

Delirium попросили на русском, вот как раз ссылку с одного ресурса программистов и дал, а вторая даёт в удобной форме представление. А так конечно, всё, кроме недокументированных возможностей, можно найти в MSDN. А ссылки, если что, можно всегда вспомнить через поисковик...

alexa___ 04-08-2008 08:44 867328

Помогите пожалуйста.
Нужно на форме разместить фрейм с вертикальной прокруткой, чтобы на нем можно было разместить несколько изображений. Как это можно сделать?

Delirium 04-08-2008 09:12 867345

alexa___, вы имеете в виду веб приложение или VBA?

alexa___ 04-08-2008 09:34 867361

Delirium, обычное оконное приложение. Вот незнаю каким компонентом сделать.

Uzvern 04-08-2008 20:53 867875

alexa___, если я правильно понял, то будет что-то типо этого (ток над кодом надо ещё немного подшаманить) :
Код:

Public Class Form1

    Private VSB As New VScrollBar
    Private PB As PictureBox

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Controls.Add(VSB)

        AddHandler VSB.Scroll, AddressOf VSB_Scroll

        VSB.Dock = DockStyle.Right

        For PBI As Integer = 0 To 3
            Dim PB As New PictureBox
            PB.Size = New Size(100, 100)
            PB.Image = PB.ErrorImage
            PB.Location = New Point(100, PB.Location.Y + 100 + PBI * 100)
            Controls.Add(PB)
        Next

    End Sub

    Private Sub VSB_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs)
        If Not VSB.Value = 0 And Not VSB.Value = 91 Then
            For Each CE In Controls
                If TypeOf CE Is PictureBox Then
                    PB = CE
                    If e.OldValue > e.NewValue Then
                        PB.Location = New Point(PB.Location.X, PB.Location.Y + e.NewValue + e.OldValue)
                    Else
                        PB.Location = New Point(PB.Location.X, PB.Location.Y - e.NewValue - e.OldValue)
                    End If
                End If
            Next
        End If
    End Sub
End Class


alexa___ 05-08-2008 10:03 868215

Uzvern, Спасибо, но не то наверное. Мне ненужен код.
Нужен инструмент (компонент), с помощью которого можно сделать.
Необходимо поле с прокруткой на котором можно расположить другие объекты, всего лишь.

Uzvern 05-08-2008 14:08 868475

alexa___, если надо поле, то можно спокойно использовать ToolStripContainer или GroupBox применя вышеизложеный код для прокрутки компонентов. На счет компонента : самому бы хотелось узнать существует ли такой.

alexa___ 05-08-2008 14:50 868521

Uzvern,
В том то и дело, что все рисунки (изображения) могут не вместится в область формы, надо чтобы они позиционировались на этом "поле".

Неужели нет решения? Я уверен что дожно быть. Программисты, отзовитесь!!!

Delirium 05-08-2008 16:53 868643

alexa___, ты можешь в конце концов указать язык, на котором пишешь? в .NET Framework 2.0 есть контейнер ToolStripContainer, как уже сказал Uzvern:

ToolStripContainer Class
Provides panels on each side of the form and a central panel that can hold one or more controls.

Visual Basic (Declaration)
<ComVisibleAttribute(True)> _
<ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch)> _
Public Class ToolStripContainer _
Inherits ContainerControl

Visual Basic (Usage)
Dim instance As ToolStripContainer

В этом контейнере уже можешь делать что душе угодно.

ссылка с MSDN:
ms-help://MS.MSDNQTR.v90.en/fxref_system.windows.forms/html/1a9341d0-58da-0c16-762d-a9ec150ae790.htm

alexa___ 05-08-2008 17:01 868656

Delirium, ты мне коды пишешь, а мне нужен компонет, который можно выбрать на панели инструментов и положить его на форму. (.NET Framework 3.5) - может 2.0 выбрать?

Uzvern 05-08-2008 17:29 868668

alexa___, если бы такое компонет существовал, то тебе бы тогда уже давно написали как его вызвать и кинуть на форму. Мое мнение таково : этот компонент не нужен, т.к. есть V(H)ScrollBar с сочетанием других компонентов.

Вот код :
Код:

    Private Sub VSB_Scroll(ByVal e As System.Windows.Forms.ScrollEventArgs, ByVal ParamArray Components() As Object)
        For Each EC As Object In Components
            If e.OldValue > e.NewValue Then
                EC.Location = New Point(EC.Location.X, EC.Location.Y + e.NewValue + e.OldValue)
            Else
                EC.Location = New Point(EC.Location.X, EC.Location.Y - e.NewValue - e.OldValue)
            End If
        Next
    End Sub

Как его юзать :
Код:

    Private Sub VScrollBar1_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles VScrollBar1.Scroll
        VSB_Scroll(e, указываем нужные компоненты через запятую)
    End Sub


Uzvern 05-08-2008 23:45 868979

Как можно задать иконки файлам, кторые открываются через написаную прогу? Типа как AIMP задает иконки на звуковые файлы.

Delirium 06-08-2008 01:37 869046

Открываем реестр....
Смотрим пример текстового файла....
[HKEY_CLASSES_ROOT\txtfile\DefaultIcon]
@=%SystemRoot%\system32\shell32.dll,-152

Соответственно, если у вас есть файлы ваши с расширением abc, то надо в реестре сделать запись примерно похожую на txtfile.

Uzvern 06-08-2008 01:56 869055

Ещё небольшой вопрос не по теме : как можно создавать (!) (в одной файле, несколько иконок разного качества)?
Рисовать то мы их умеем, осталось только их как-то в один ico-файл упаковать.

Uzvern 09-08-2008 00:04 871504

Как обозначит переменную, как Controls?
Код:

Dim FEControls As
Просто хочу сделать, чтобы можно было обозначить нужный Controls

И как можно открыть папку и выделить какой-либо элемент?

Мессир 16-08-2008 21:19 876790

Доброго времени суток.
Уже пятый день бьюсь над вопросом и ничего не получается :dont-know. Подскажите плиз
Вопрос в следующем:
Есть на винчестере картинка, кликнув на кнопке необходимо её загрузить, уменьшить до размеров 150х110 пикс. и сохранить в другом месте с этими размерами.
Как вариант её еще нужно отобразить в PictureBox, но с этим проблем у меня не возникнет, я надеюсь..

Uzvern 16-08-2008 23:07 876847

Мессир, чтобы сохранить файл можно воспользоваться этим кодом, а вот как изменить размеры сохраняемого файла, это мне тоже интерестно :yes:

Код:

    Dim SFD As New SaveFileDialog
    Dim PB As PictureBox

    Sub SaveImage(ByVal PictureBox As PictureBox)
        PB = PictureBox
        AddHandler SFD.FileOk, AddressOf SFD_FO
        SFD.ShowDialog()
    End Sub

    Sub SFD_FO()
        PB.Image.Save(SFD.FileName)
    End Sub

чтобы загрузить изображение в PictureBox

Код:

    Sub PictureLoad(ByVal PictureBox As PictureBox, ByVal Path As String)
        PictureBox.Load(Path)
        PictureBox.Size = New Size(150, 110)
        PictureBox.SizeMode = PictureBoxSizeMode.StretchImage
    End Sub


Мессир 17-08-2008 03:45 876949

Цитата:

Цитата Uzvern
Ещё небольшой вопрос не по теме : как можно создавать (!) (в одной файле, несколько иконок разного качества)?
Рисовать то мы их умеем, осталось только их как-то в один ico-файл упаковать. »

Я для этого юзаю прогу IconUtils. там можно чё угодно с иконами делать.
Цитата:

Цитата Uzvern
Мессир, чтобы сохранить файл можно воспользоваться этим кодом, »

Спасибо. попробую. :up
Цитата:

Цитата Uzvern
а вот как изменить размеры сохраняемого файла, это мне тоже интерестно »

Надеюсь если узнаеш напишеш ;-)

Uzvern 18-08-2008 00:55 877437

Цитата:

Цитата Мессир
Я для этого юзаю прогу IconUtils. там можно чё угодно с иконами делать. »

Да я уже через Visual Studio понял как сделать.

Цитата:

Цитата Мессир
Надеюсь если узнаеш напишеш ;-) »

Думаю, что тебе адмирал быстрее ответит :) :yes:

Uzvern 18-08-2008 19:30 878011

Изменяем размеры изображения
Код:

    Dim OFD As New OpenFileDialog
    Dim SFD As New SaveFileDialog

    Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load
        OFD.Filter = "All Files|*.*"
        SFD.Filter = "JPG|*.jpg|GIF|*.gif|PNG|*.png"

        AddHandler OFD.FileOk, AddressOf OFD_FO
        AddHandler SFD.FileOk, AddressOf SFD_FO

        OFD.ShowDialog()
        End
    End Sub

    Private Sub OFD_FO()
        If IO.File.Exists(OFD.FileName) Then
            If OFD.FileName.EndsWith(".jpg") Or OFD.FileName.EndsWith(".gif") Or OFD.FileName.EndsWith(".png") Then
                SFD.ShowDialog()
            Else
                MsgBox("Вы указали неверный файл.", MsgBoxStyle.Critical, "Ошибка")
            End If
        End If
    End Sub

    Private Sub SFD_FO()
        Dim Size As Size = New Size(150, 110)

        Dim b As New Bitmap(Bitmap.FromFile(OFD.FileName), Size)
        For Each SFDFE In SFD.Filter
            Select Case SFDFE
                Case "JPG"
                    b.Save(SFD.FileName, Imaging.ImageFormat.Jpeg)
                    End
                Case "GIF"
                    b.Save(SFD.FileName, Imaging.ImageFormat.Gif)
                    End
                Case "PNG"
                    b.Save(SFD.FileName, Imaging.ImageFormat.Png)
                    End
            End Select
        Next
    End Sub



стырил отсюда

как в (Save/Open)FileDialog можно указать несколько расширений?
Код:

All Files|*.*
это все файлы, а мне нужно указать например
Код:

My Prog Files|*.aaa,*.aab,.*abc
что-то типо этого


Admiral, Я нашел как добавить свое поле в выпадающее меню.
152

Uzvern 19-08-2008 23:14 879112

Где можно просмотреть или как-то вывести "windows.h" header file?
Код:

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        Const ID_Load As Integer = &H1
        If m.Msg = ID_Load Then
            MsgBox("Форма удачно загружена")
        End If
        MyBase.WndProc(m)
    End Sub

Например тут &H1 отвечает за загрузку формы, &H2 за её закрытие. Дак вот мне бы хотелос узнать, где я могу получить список действий.

Delirium 20-08-2008 01:25 879192

Вам нужно именно содержимое windows.h ? В Visual Studio это просто - щелчком на этом файле - View Source. Ну или просто поиском найти его на винте :)

Uzvern 20-08-2008 01:30 879195

Delirium, чет я тебя не совсем понял! :unsure:
вообщем не нужен спиок данный дейтсвий (&H1, &H2 и т.д.) + description

Delirium 20-08-2008 01:35 879200

Вопрос звучал как:
Цитата:

Цитата Uzvern
Где можно просмотреть или как-то вывести "windows.h" header file? »

отсюда и ответ был.
С вашего кода абсолютно не понятно, что это за &H1 , у вас просто константе присваивается значение некоего &H - откуда это взято?

Uzvern 20-08-2008 01:38 879201

Цитата:

Цитата Uzvern
&H1 отвечает за загрузку формы »

Цитата:

Цитата Uzvern
&H2 за её закрытие »

Цитата:

Цитата Delirium
откуда это взято »

Ну как бы из интернета.

Прсто я подумал, что "windows.h" - это именно действия, похоже я ошибся и задал вопрос не совсем корректно...

Delirium 20-08-2008 01:52 879210

Ну так вы бы писали, что вам необходимы коды &H203 и им подобные :) Это похоже на #define в заголовочных файлах. Ищите windows.h как я писал, и будет счастье :) Ну, если есть время, подождите, поищу.

Подсказка: копать примерно отсюда

Uzvern 20-08-2008 12:26 879483

спасибо! :happy:

Uzvern 20-08-2008 23:54 879957

В чем различие
Код:

Next и Next(x) в цикле For(Each)(x)
Например,
Код:

        For FEE As Integer = 0 To DisplayOfValues - 1
            SB.Append(Args(FEE))
      Next

Код:

        For FEE As Integer = 0 To DisplayOfValues - 1
            SB.Append(Args(FEE))
        Next FEE


Delirium 21-08-2008 01:07 879997

НИКАКОГО :) просто в старых версия basic'a необходимо было писать next FEE, а потом упростили и сделали без FEE. Можно писать обоими способами :)

Uzvern 21-08-2008 01:19 880004

А можно как-то по быстрому заполнить ListBox значение из алфавита?
чтобы не писать вот так
Код:

            ListBox1.Items.Add("A")
            ListBox1.Items.Add("B")
            ListBox1.Items.Add("C")
            ListBox1.Items.Add("D")
            ListBox1.Items.Add("E")
            ListBox1.Items.Add("F")
            ListBox1.Items.Add("G")

или так
Код:

        With ListBox1.Items
            .Add("A")
            .Add("B")
            .Add("C")
            .Add("D")
            .Add("E")
            .Add("F")
            .Add("G")
        End With

а как-то побыстрей. там вроде как-то можно через For или чет типо того, но точно не уверен...

Delirium 21-08-2008 01:31 880009

Смотрите в сторону CHR - то есть это функция, возвращающая символ по коду. К примеру chr(65) - "а" - по моему. chr(66) - "б".
О, нашел в MSDN:
Код:

Dim associatedChar As Char
' Returns "A".
associatedChar = Chr(65)
' Returns "a".
associatedChar = Chr(97)
' Returns ">".
associatedChar = Chr(62)
' Returns "%".
associatedChar = Chr(37)

Соотв-но, надо найти коды русских букв и запулить их через for-next

Цитата:

Parameters
CharCode
Type: System..::.Int32

Required. An Integer expression representing the code point, or character code, for the character. If CharCode is outside the valid range, an ArgumentException error occurs. The valid range for Chr is 0 through 255, and the valid range for ChrW is -32768 through 65535.
______

Uzvern 21-08-2008 01:37 880016

ЗАчем их искать, если можно тупо самому их узнать
Коды всех символов всего 255

Код:

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim RB As New RichTextBox
        RB.Dock = DockStyle.Fill
        Controls.Add(RB)
        For Chars As Integer = 0 To 255
            If Chars <> 255 Then
                RB.Text &= Chr(Chars) & " - " & Asc(Chr(Chars)) & Chr(13)
            Else
                RB.Text &= Chr(Chars) & " - " & Asc(Chr(Chars))
            End If
        Next
    End Sub
End Class



Об этом я знал, просто думал, что можно как-то ещё...

Delirium 21-08-2008 01:46 880022

Цитата:

Цитата Uzvern
Коды всех символов всего 255 »

Цитата:

Цитата Delirium
valid range for ChrW is -32768 through 65535. »

ну и не 255 их, а чутка побольше :)
Цитата:

Цитата Uzvern
Об этом я знал, просто думал, что можно как-то ещё... »

а зачем изобретать велосипед, если все уже есть :)

Uzvern 21-08-2008 01:49 880026

Скажем так : я любознательный и хочу знать больше :biggrin:

Цитата:

Цитата Delirium
valid range for ChrW is -32768 through 65535.»

ухух...надо бы как то их тоже достать

Uzvern 26-08-2008 20:45 884427

Почему данный код не срабатывает?
Код:

Me.Controls.AddRange(New Object() {L, TB, B, C})

Delirium 27-08-2008 01:09 884674

Цитата:

Цитата Uzvern
Почему данный код не срабатывает? »

Дык вы приведите хотя бы часть кода и описание ошибки, тогда и видно будет, почему не срабатывает :)

Uzvern 27-08-2008 01:26 884679

Хочу добавить на форму объекты

Error

Код:

Не удалось привести тип объекта "System.Object[]" к типу "System.Windows.Forms.Control[]".

Code

Вот так все прекрасно добавляется
Код:

        With Controls
            .Add(L)
            .Add(B)
            .Add(TB)
            .Add(C)
        End With

А вот так не хочет
Код:

    Dim L As New Label
    Dim B As New Button
    Dim TB As New TextBox
    Dim C As New CheckBox

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try
            Me.Controls.AddRange(New Object() {L, B, TB, C})
        Catch ex As Exception
            MsgBox(ex.Message)
            Clipboard.SetText(ex.Message)
        End Try
    End Sub



Исходя из ошибки пробовал заменить Object на Control, но тогда вообще никакой ошибки не выскакивает, но и объекты тоже не добавляются!

Delirium 27-08-2008 01:34 884683

В смысле добавить объекты? ПРограммно, чтобы при загрузке формы добавлялись объекты эти? А сразу нарисовать их не проще? Вы же добавляете дефолтные объекты.
А вообще, вот цитата с MSDN
Цитата:

The following code example adds two Control objects to the Control..::.ControlCollection of the derived class Panel. The example requires that you have created a Panel control and a Button control on a Form. When the button is clicked, two RadioButton controls are added to the panel's Control..::.ControlCollection.

Visual Basic Copy Code
' Create two RadioButtons to add to the Panel.
Dim RadioAddButton As RadioButton = New RadioButton()
Dim RadioAddRangeButton As RadioButton = New RadioButton()

' Add controls to the Panel using the AddRange method.
Private Sub AddRangeButton_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles AddRangeButton.Click
' Set the Text the RadioButtons will display.
RadioAddButton.Text = "RadioAddButton"
RadioAddRangeButton.Text = "RadioAddRangeButton"

' Set the appropriate location of RadioAddRangeButton.
RadioAddRangeButton.Location = New System.Drawing.Point( _
RadioAddButton.Location.X, _
RadioAddButton.Location.Y + RadioAddButton.Height)

' Add the controls to the Panel.
Panel1.Controls.AddRange(New Control() {RadioAddButton, RadioAddRangeButton})
End Sub


ДОбавляют 2 элемента, НО: объявляют их как Dim RadioAddButton As RadioButton = New RadioButton() и потом задают им свойства. Без этого, скорее всего, они не добавятся.

Delirium 27-08-2008 02:16 884694

Получилось?

Uzvern 27-08-2008 12:22 884892

Delirium, ну вроде бы да :)

Uzvern 04-09-2008 15:51 890917

Как в For Each можно перейти на следующий элемент? Наример мне ненужно записывать какое-то значение, и если оно обнаружено, то переходит на следующий.
вот например пытаюсь сделать обход System Volume Information, но она все-равно проскакивает
Код:

    Function GetFilesAndFolders(ByVal Folder As String) As String
        Dim StringBuilder As New System.Text.StringBuilder
        Dim FolderName As IO.DirectoryInfo

        StringBuilder.AppendLine(Folder)

        For Each Path As String In IO.Directory.GetDirectories(Folder)

            Try
                FolderName = My.Computer.FileSystem.GetDirectoryInfo(Folder)

                If FolderName.Name = "System Volume Information" Then
                    ChDir("..")
                    Continue For
                End If

                ChDir(Path)

                StringBuilder.AppendLine(GetFilesAndFolders(Path))
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Critical, "Ошибка")
            End Try

        Next

        For Each File As String In IO.Directory.GetFiles(Folder)
            StringBuilder.AppendLine(File)
        Next

        Return StringBuilder.ToString
    End Function


Delirium 05-09-2008 01:53 891334

В смысле обход? Нужно именно поймать "System Volume Information" или пропустить его в обходе?
Протестировал код... Когда в качестве параметра функции пишу "C:\", начинается обход с корня диска и подвисает, точнее очень долго делает обход всех папок.
ЧТобы цикл зашел в нужную папку, прописал вот так:

Цитата:

If Path = Folder & "System Volume Information" then
вместо
Цитата:

Цитата Uzvern
If FolderName.Name = "System Volume Information" Then »

Только я не пойму, что дальше то сделать надо вам :)

Uzvern 05-09-2008 13:52 891608

Мне необходимо его наоборот пропустить!

Admiral 06-09-2008 14:52 892366

Uzvern, оно и будет пропускать если подкорректировать условия, как подсказал Delirium. Проверяется это очень просто добавлением строчки Print.Debug("FolderName.Name") после условия, что б видеть что оно сработало. Можно и до, будут отображаться все пути пройденные программой, это ещё наглядно будет показывать что программа не висит.
Очень хорошо что была найдена возможность добавлять свой пункт в контекстное меню. :up:
Delirium по дефолту к данной папке (при условии использовании NTFS) доступ заказан даже админу вот по этому Uzvern потребовалось обойти эту папку.

Uzvern 10-09-2008 16:16 895572

Как можно открыть папку и выделить неоходимый файл?

Admiral 10-09-2008 22:03 895872

Что бы выделить файл, например boot.ini в корне диска C, необходим код следующего вида
Код:

Call Shell("Explorer.exe /n,/e,/select, C:\boot.ini", vbNormalFocus)
>>

Uzvern 10-09-2008 22:07 895877

Код:

Call
Что означает? Не первый раз уже вижу это слово в кодах, но так и не понял для чего же оно :dont-know

Admiral 10-09-2008 22:28 895890

Call (оператор) - передает управление процедуре модуля (Sub), функции модуля (Function) или подпрограмме DLL >> определение от VB6 но справедливо и для VB.NET

В данном конкретном случаи оставлено мною для совместимости с проектами VB6.
VB.NET 2008 позволяет применять Shell и без этого оператора, VB6 же пожелает избавится от второго параметра функции Shell если я не напишу этот оператор.


Если в будущем при кодировании возникнет проблема с передачей управления процедуре, функции, внешней подпрограмме без видимых на то причин (все аргументы согласованы, имена написаны правильно) можно будет написать этот оператором и возможно разрешить проблему. Собственно в таких случаях необходимо его применять.

Uzvern 15-09-2008 01:25 899369

а как-то можно без webbrowser загрузить код страницы?
и как в webbrowser отключить картинки?
Console.WriteLine - где посмотреть то, что сюда записалось?

Delirium 15-09-2008 02:07 899377

Console.WriteLine - это вывод на экран текста в консольной версии программы. Если Win32, то пишите MsgBox вместо Console.WriteLine.
Цитата:

Цитата Uzvern
и как в webbrowser отключить картинки? »

Смотря какой браузер :)

Uzvern 15-09-2008 08:45 899478

Delirium, компонент WebBrowser

Delirium 15-09-2008 09:10 899493

Затупил :)
Может быть это поможет?
http://forum.codeby.net/topic7793.html
http://www.gotdotnet.ru/Forums/Common/91613.aspx

Uzvern 15-09-2008 09:48 899522

ух. жутко, но попытаюсь разобрать. Спс, а случайно не знаешь как загрузить код станицы без WebBrowser?

Delirium 15-09-2008 09:54 899532

ммм..... ну только если так попробовать:
Код:

WebClient myClient = new WebClient();
myClient.Credentials = CredentialCache.DefaultCredentials;
Stream response = myClient.OpenRead("http://ru.uefa.com");
byte[] bytes = new byte[10000];
int n = response.Read(bytes,0,3000);
int br = 0;
while (n>0)
{
br+=n;
n = response.Read(bytes,br+1,3000);
}
String s = Encoding.ASCII.GetString(bytes);


В строке s и будет HTML код документа

Взято отсюда
Поищи заодно на rsdn.ru по тексту "HTML-код страницы в C# коде".

Uzvern 15-09-2008 10:13 899539

чет я немогу последний код из С в VB переделать...

Admiral 15-09-2008 10:18 899541

Uzvern, написания своего ВебКомпонента, равносильно написании своего ВебБраузера. Принцип построения проще всего узнать просмотрев какой-нибудь ОпенСоурсе браузере, что несколько отводить от идеологии .NET где всё под рукой и готово.

Как не отображать (или сразу не грузить) картинки можно посмотреть здесь http://forums.microsoft.com/msdn/Sho...13729&SiteID=1, а так же здесь (там правда C#) http://geekswithblogs.net/dotnetnoma...29/119065.aspx. Стоит проконтролировать что в странице действительно вырезаются картинки на лету (даже не грузятся), а не после загрузки когда они уже накрутили трафик и по просто не отображаются.

Uzvern 22-09-2008 19:30 905930

Как программно изменить свойства папки (сменить значок, тип файлов) ?

Delirium 23-09-2008 01:28 906221

Uzvern, вы там винду новую пишете? :)
Цитата:

Цитата Uzvern
Как программно изменить свойства папки (сменить значок) ? »

один из вариантов:
desktop.ini в папке:
[.ShellClassInfo]
IconFile=%SystemRoot%\system32\SHELL32.dll
IconIndex=22
Примерно так. Создать файл и запихать туда нужные строки.

А вообще посмотрите функции Shell, там должно это быть.
Цитата:

The following example shows how to set a window icon. (Window.Icon Property)
// Set an icon using code
Uri iconUri = new Uri("pack://application:,,,/WPFIcon2.ico", UriKind.RelativeOrAbsolute);
this.Icon = BitmapFrame.Create(iconUri);

Uzvern 23-09-2008 17:40 906789

Ну вот написал код, но чет он не пашет (Все создает, ноиконку не меняет) :
Код:

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim i As Integer
        Do While IO.Directory.Exists("C:\" & i)
            i += 1
        Loop

        MkDir("C:\" & i)

        Try
            If IO.File.Exists("C:\" & i & "\desktop.ini") Then
                IO.File.SetAttributes("C:\" & i & "\desktop.ini", IO.FileAttributes.Normal)
            End If

            Dim File As Integer = FreeFile()
            FileOpen(File, "C:\" & i & "\desktop.ini", OpenMode.Output)
            PrintLine(File, "[.ShellClassInfo]")
            PrintLine(File, "IconFile=%SystemRoot%\system32\SHELL32.dll")
            PrintLine(File, "IconIndex=25")
            FileClose(File)

            IO.File.SetAttributes("C:\" & i & "\desktop.ini", IO.FileAttributes.System)
            IO.File.SetAttributes("C:\" & i & "\desktop.ini", IO.FileAttributes.Hidden)

            Shell("explorer /select, C:\" & i, AppWinStyle.NormalFocus)

            End
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
            End
        End Try
    End Sub
End Class


Delirium 24-09-2008 01:17 907175

Да, действительно, просто создание файла desktop.ini не дает нужного результата. Об этом писали здесь .
Похоже, единственные вариант - использовать функции Shell, пример использования(на делфи) есть здесь. Если брать VB или C#, то описание задано в
статье MSDN :
Цитата:

SHGetSetFolderCustomSettings Function

Sets or retrieves custom folder settings. This function reads from and writes to Desktop.ini.

Uzvern 03-10-2008 11:54 914899

Как можно изменить размеры верхней (главной) строки программы (Где название, иконка, кнопки закрытия/максимизации/минимизации) ?

Скрин

Например вот с такого

до такого, если вообще возможно...


Admiral 03-10-2008 23:23 915353

Эта строка называется TitleBar, её параметры устанавливаются в настройках Виндовса, значения можно получить командой MsgBox(SystemInformation.CaptionHeight.ToString)
или
Dim TitlebarHeight As Integer = Me.Height - Me.ClientSize.Height - Me.Width + Me.ClientSize.Width
MsgBox(TitlebarHeight)

Как вариант решения можно создать свою аналогию, перерисовав графику, но стоит ли тогда вообще строить квадратно подобные формы? Если не стоит, то вот как примерно такое окно можно построить, по готовому нарисованному рисунку.
Так же пример по С#.

Uzvern 04-10-2008 14:41 915594

А как-то можно изменить размеры CaptionHeight?
По нарисованому рисунку не интерестно. Я хочу именно CaptionHeight изменить

Admiral 04-10-2008 16:01 915637

Uzvern, в том то и дело что SystemInformation.CaptionHeight параметр только для чтения, его можно косвенно (меняя Color Sheme) через это окно затрагивая все оконные приложений Виндовс.

Uzvern 04-10-2008 17:33 915691

Admiral, а как тогда тут сделано оО

Admiral 04-10-2008 18:41 915731

Uzvern, я этот скрин ещё в предыдущем посте смотрел, и прикинул что это организовывается аналогично тому, как инсталлятор Висты/2008 рисуется в ХР/2003 >>. Может в одном из ресурсов данной программы и лежит рамка этого окна.

Приблизить к такому эффекту в новом проекте может следующий код
Код:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.ShowIcon = False
        Me.Text = ""
        Me.MaximizeBox = False
        Me.MinimizeBox = False
    End Sub

на ХР этот код даёт такой эффект.

Uzvern 04-10-2008 19:51 915806

Admiral, либо я что-то не понял, либо ты. У меня стоит Aero. как ты видишь, окно подвергается эффектам Aero. Т.е. это не нарисованая форма, а просто растянутый на всю прогамму TitleBar :unsure:
На ХР-шке окно не прозрачное!

Admiral 04-10-2008 20:04 915815

Цитата:

Цитата Uzvern
У меня стоит Aero. »

Разработчики вдоль и поперёк написали все функции в своей оболочке. По этому добились таких результатов. Любое окно запущенное под данной оболочкой ищет системные библиотеки, а они уже переписаны и выходит они строятся по новым правилам.
За прозрачность отвечает Me.Opacity, значения от 0 до 1.

Uzvern 06-10-2008 19:28 917275

Вот пример : http://www.gotdotnet.ru/Forums/Windows/581428.aspx
А тут их куча, только с переводом траблы : http://weblogs.asp.net/kennykerr/arc...w-Manager.aspx

+ немогу добавить объект на прозрачную область. Нет, он добавляется, но некорректно.

Admiral 06-10-2008 19:46 917297

Uzvern, класные ссылки и примеры. :clapping:
Возможно глюки GDI+. Тут уже ничего не сделаешь, разве что свою реализацию писать.

Uzvern 06-10-2008 19:51 917304

Admiral, ни одного слова не понял, но спасибо.

Admiral 06-10-2008 21:07 917374

Uzvern, в приведённой статье сказано
Цитата:

Therefore, if you are serious about transparency and translucency on Windows you need to use GDI+ (or some other graphics library). Before we look at GDI+ however, let us see what can be done with good old GDI. >>
то есть рассмотрен ранее вопрос с применением GDI+ или другой (в том числе и самостоятельной написанной). Так же указанно, что можно организовать и с помощью "старой доброй GDI".
Без кода по вопросу
Цитата:

Цитата Uzvern
+ немогу добавить объект на прозрачную область. Нет, он добавляется, но некорректно. »

можно говорить только в общих чертах, ведь даже не указанна с помощью какой технологии (GDI, GDI+, etc) отрисована форма c объектом. Я высказал своё предположение, на случай если это GDI+, так как даже в базовых примерах бывают глюки отображения.

Codru 07-10-2008 16:34 918008

Помогите запустить следующую программу, находясь в документе Word. Заранее благодарю.
Код:

Option Explicit
Private Declare Function BeginPath Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function EndPath Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function PathToRegion Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Sub Form_Load()
        Const TEXT = "Привет, я текст!"
        Dim hRgn As Long
        Font.Name = "Times New Roman"
        Font.Bold = True
        Font.Size = 70
        Width = TextWidth(TEXT)
        Height = TextHeight(TEXT)
        BeginPath hdc
        Print TEXT
        EndPath hdc
        hRgn = PathToRegion(hdc)
        SetWindowRgn hWnd, hRgn, False
        Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
End Sub


Delirium 08-10-2008 01:21 918416

Во первых, нет описания функций TextWidth, TextHeight. Во вторых, не совсем понятен смысл данного кода.

Codru 08-10-2008 01:45 918428

Delirium Нашел эту процедуру в И-нете "Вывод на экран текста, форма приобретает вид текста". Пытался ее вставлять в форму, но ее делит на процедуру (макрос), первую часть до "Private Sub..." отделяет. Не знаю как обьединить. Хотя и не уверен, но думаю, что фнкции TextWidth, TextHeight смогу расписать. Программированием уже лет 12-ть не занимался, хотя в VBA совсем иной принцип заложен.

Delirium 08-10-2008 01:56 918433

Цитата:

Цитата Codru
первую часть до "Private Sub..." отделяет »

Так и должно быть, в VBA option explicit означает определение глобальных переменных.
Цитата:

Цитата Codru
Private Sub Form_Load() »

Процедура вызывалась в Visual Basic (не VBA), и срабатывала при загрузке формы. В Word ее запустить не удастся.

Codru 08-10-2008 02:22 918447

Delirium , и что делать, ни как нельзя приспособить? вроде бы программа была расписана для VBA. Уж больно идея понравилась.
Идея в том, что хочу разместить рисунок и рядом с ним текст, который изменялся бы при выделении разных областей рисунка. Все это хочеться разместить просто на листе, либо на форме развернутой во весь экран.

Delirium 08-10-2008 02:31 918450

В смысле что то типа picker'а? Т.е. написал я текст, а потом ткнул мышкой, и текст стал цвета пикселя на картинке? Можешь пример хоть примерно нарисовать?

Uzvern 28-10-2008 19:37 936338

Помогите отловить сообщение Windows о подтверждении удаления файла/папки и нажать кнопку "Нет".

Delirium 29-10-2008 01:38 936675

Uzvern, а в когда оно появляется? Имеется в виду, в вашей программе или где? Это же по сути простой MessageBox с vbYesNo.

Uzvern 29-10-2008 12:18 936942

Цитата:

Цитата Uzvern
сообщение Windows »

Не в моей программе, а в самом Windows когда удаляешь какой - либо файл.

Delirium 30-10-2008 02:22 937621

хмм. а отслеживать необходимо через свою программу? Единственный вариант, который приходит в голову - отслеживать появление окон с заголовком "подтверждение удаления файла" и программно нажимать "нет". AutoIT работает по такому принципу.

Admiral 30-10-2008 03:45 937646

Uzvern, есть исходник на С++ http://ja.pastebin.ca/raw/890971
Результат
,
а в теме есть примеры использования WinApi функций в VB.NET, которые присутствуют в данном C++ исходнике.

Данную защиту можно обойти использовав не Експлоре, например через FAR, TotalCommander и другие файловые менеджеры удалить файл всё же получится.

Uzvern 30-10-2008 08:30 937740

Admiral, а обход мне неочень интересен, т.к. человек все-равно до этого не додумается. Щас буду пробовать переводить код с С++ в VB :)

paul_p 03-11-2008 17:57 941839

Доброго времени суток, Уважаемые обитатели форума!
Я начал изучать VB совсем недавно, примерно 1,5 месяца назад.
Поиск на форуме мне к сожалению не помог, т.к. проблема видимо слишком простая и скорее всего не обсуждалась. А суть проблемы такова: нужно при нажатии кнопки Button2 сохранить данные из ListBox1в файл с расширением *.xls, ну или хотя бы в *.txt
На машине установлено:
Visual Studio 2008 Express, а в качестве офисного приложения OpenOffice 3.0 (MSOffice нет.)
Собственно, если нет прямой возможности сохранить в *.xls, текстовый файл вполне подойдет.

Вот текст приложения:

Public Class Form2

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'ЗАПОЛНЕНИЕ ФОРМЫ СИСТЕМНОГО БЛОКА
'Системный блок
ListBox1.Items.Add(GroupBox7.Text)
ListBox1.Items.Add(Label4.Text)
ListBox1.Items.Add(TextBox4.Text)
ListBox1.Items.Add(Label17.Text)
ListBox1.Items.Add(TextBox5.Text)
'Материнская плата
ListBox1.Items.Add(GroupBox1.Text)
ListBox1.Items.Add(Label5.Text)
ListBox1.Items.Add(ComboBox1.Text)
ListBox1.Items.Add(Label6.Text)
ListBox1.Items.Add(TextBox7.Text)
'Блок питания
ListBox1.Items.Add(GroupBox2.Text)
ListBox1.Items.Add(Label8.Text)
ListBox1.Items.Add(ComboBox2.Text)
ListBox1.Items.Add(Label7.Text)
ListBox1.Items.Add(TextBox9.Text)
'HDD
ListBox1.Items.Add(GroupBox3.Text)
ListBox1.Items.Add(Label10.Text)
ListBox1.Items.Add(ComboBox3.Text)
ListBox1.Items.Add(Label9.Text)
ListBox1.Items.Add(TextBox11.Text)
'FDD
ListBox1.Items.Add(GroupBox4.Text)
ListBox1.Items.Add(Label12.Text)
ListBox1.Items.Add(ComboBox4.Text)
ListBox1.Items.Add(Label11.Text)
ListBox1.Items.Add(TextBox13.Text)
'DVD
ListBox1.Items.Add(GroupBox5.Text)
ListBox1.Items.Add(Label14.Text)
ListBox1.Items.Add(ComboBox5.Text)
ListBox1.Items.Add(Label13.Text)
ListBox1.Items.Add(TextBox15.Text)
'Сетевая карта
ListBox1.Items.Add(GroupBox6.Text)
ListBox1.Items.Add(Label16.Text)
ListBox1.Items.Add(ComboBox6.Text)
ListBox1.Items.Add(Label15.Text)
ListBox1.Items.Add(TextBox17.Text)
'Видеокарта
ListBox1.Items.Add(GroupBox7.Text)
ListBox1.Items.Add(Label18.Text)
ListBox1.Items.Add(ComboBox7.Text)
ListBox1.Items.Add(Label19.Text)
ListBox1.Items.Add(TextBox19.Text)
'Очистка заполненных строк
TextBox4.Clear()
TextBox5.Clear()
TextBox7.Clear()
TextBox9.Clear()
TextBox11.Clear()
TextBox13.Clear()
TextBox15.Clear()
TextBox17.Clear()
TextBox19.Clear()

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Заполнение формы заказа
ListBox1.Items.Add(Label1.Text)
ListBox1.Items.Add(TextBox1.Text)
ListBox1.Items.Add(Label2.Text)
ListBox1.Items.Add(TextBox2.Text)
ListBox1.Items.Add(Label3.Text)
ListBox1.Items.Add(TextBox3.Text)
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

End Sub

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

End Sub

Private Sub SaveFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SaveFileDialog1.FileOk

End Sub

Private Sub GroupBox8_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBox8.Enter

End Sub
End Class

Спасибо.

Admiral 04-11-2008 04:22 942422

paul_p, приветствую.
Цитата:

Цитата paul_p
нужно при нажатии кнопки Button2 сохранить данные из ListBox1в файл с расширением *.xls»

на первый взгляд, если установка Excel не предусмотрена, всё вроде просто Creating an Excel spreadsheet XLS file direct from your .Net app with SpeadsheetGear да вот только SpeadsheetGear стоит денег :(
Цитата:

Цитата paul_p
ну или хотя бы в *.txt »

Код:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim File As Integer = FreeFile()
        FileOpen(File, "MyFile.txt", OpenMode.Append)
        For i As Integer = 0 To ListBox1.Items.Count - 1
            PrintLine(File, ListBox1.Items.Item(i))
        Next i
        FileClose(File)
End Sub

в теме уже было рассказано про сохранение в файл.

А компоненты GroupBox1, GroupBox2, .., GroupBox7, TextBox, Label1, Label2, .., Label19, TextBox1, TextBox2, .., TextBox19 нужны именно в таком количестве?

Между прочим код можно немного преобразовать с помощью операторов With и End With что уже было показано в теме
результат по данному примеру

Код:

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        'ЗАПОЛНЕНИЕ ФОРМЫ СИСТЕМНОГО БЛОКА
        'Системный блок
        With ListBox1.Items

            .Add(GroupBox7.Text)
            .Add(Label4.Text)
            .Add(TextBox4.Text)
            .Add(Label17.Text)
            .Add(TextBox5.Text)
            'Материнская плата
            .Add(GroupBox1.Text)
            .Add(Label5.Text)
            .Add(ComboBox1.Text)
            .Add(Label6.Text)
            .Add(TextBox7.Text)
            'Блок питания
            .Add(GroupBox2.Text)
            .Add(Label8.Text)
            .Add(ComboBox2.Text)
            .Add(Label7.Text)
            .Add(TextBox9.Text)
            'HDD
            .Add(GroupBox3.Text)
            .Add(Label10.Text)
            .Add(ComboBox3.Text)
            .Add(Label9.Text)
            .Add(TextBox11.Text)
            'FDD
            .Add(GroupBox4.Text)
            .Add(Label12.Text)
            .Add(ComboBox4.Text)
            .Add(Label11.Text)
            .Add(TextBox13.Text)
            'DVD
            .Add(GroupBox5.Text)
            .Add(Label14.Text)
            .Add(ComboBox5.Text)
            .Add(Label13.Text)
            .Add(TextBox15.Text)
            'Сетевая карта
            .Add(GroupBox6.Text)
            .Add(Label16.Text)
            .Add(ComboBox6.Text)
            .Add(Label15.Text)
            .Add(TextBox17.Text)
            'Видеокарта
            .Add(GroupBox7.Text)
            .Add(Label18.Text)
            .Add(ComboBox7.Text)
            .Add(Label19.Text)
            .Add(TextBox19.Text)
            'Очистка заполненных строк
        End With
'...
End Sub
'...
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'Заполнение формы заказа
        With ListBox1.Items
            .Add(Label1.Text)
            .Add(TextBox1.Text)
            .Add(Label2.Text)
            .Add(TextBox2.Text)
            .Add(Label3.Text)
            .Add(TextBox3.Text)
        End With

    End Sub



На форуме код рекомендуется помещать между тегами [code]'здесь код[/code] .

paul_p 04-11-2008 11:20 942538

Admiral! Большое спасибо!
По всей видимости, я не совсем корректно воспользовался сервисом поиска (учту на будущее)
Тегом "code" тоже буду пользоваться обязательно, действительно удобно отделять код от текста.
Что же касается большого количества TextBox, то это обусловлено самой формой. Дело в том, что тот кто будет заполнять форму должен видеть все поля сразу, т.к. приходится их заполнять одновременно. А выбирать пункт из меню менее удобно, чем заполнять видимый.
Данная форма предназначена для многократного заполнения однотипной информации: №системного блока, серийный номер материнской платы и.т.д...

Немного доработал код сохранения в файл. Вот что получилось:

Код:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        SaveFileDialog1.Filter = "Текстовые файлы (*.txt)|*.txt"
        SaveFileDialog1.ShowDialog()
        If SaveFileDialog1.FileName <> "" Then
            FileOpen(1, SaveFileDialog1.FileName, OpenMode.Output)
            For i As Integer = 0 To ListBox1.Items.Count - 1
                PrintLine(1, ListBox1.Items.Item(i))      'копируем текст на диск
            Next i
            FileClose(1)
        End If

    End Sub


Мессир 25-03-2009 18:57 1074622

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

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

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

Admiral 27-03-2009 21:25 1076650

Мессир доброго времени суток.
Вроде всё тривиально, указываем KeepAlive = False и Connection = Nothing но на последней записи во время выполнения сваливается с ошибкой о необходимости присваивать через свойство объекта.
Только не понятно через что по их мнению сейчас идёт присвоение?
На форуме MS вопрос по данному поводу уже подымался - Get rid of Connection header in HttpWebRequest (использовали C#), отправили читать MSDN (здесь по-русски HttpWebRequest.Connection - свойство), только там поданному поводу не привели пример, а сказали как присвоить/задать.
Здесь - не отрабатывает Headers.Add вроде как поняли (в контексте другого объекта), что именно за свойство и как присваивать.
Вот так же запись в блоге Setting HTTP headers in .NET: This header must be modified using the appropriate property как раз по тексту данной ошибки.
Есть другая информация, конкретно бага в VB.NET 2008 - Assigning null to the Connection property of HttpWebRequest results in an exception только там указанно что с данным столкнулись в 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)
Вопрос остаётся открытым, быть может другие участники имеющий, опыт работы с объектом HttpWebRequest, предложат своё решение по прятанью значения Connection или вовсе его не передачи, как бывает в случаи с https.

Мессир 28-03-2009 21:54 1077489

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

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

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

GolfNorth 13-04-2009 13:34 1092713

Всем привет.

Есть небольшой вопрос. При нажатии на иконку в трее форма скрывается, либо появляется. (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 1092753

GolfNorth, Me.TopMost = True

GolfNorth 13-04-2009 17:38 1092930

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

Код:

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

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

Admiral 13-04-2009 18:10 1092960

GolfNorth если не охота связываться c Win32 Api это как раз решение не отходя от VB, на чём так же сошлись на форуме MS
Если всё же интересно, вот как это можно организовать применив 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 1092983

Visual Basic 2008
 
Помогите пожалуйсто разобраться ) Дело в том что самоучитель у меня для 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 1093068

N93, доброго времени суток.
Это оператор в VB6 был оставлен для переходящих с QBasic, его основное предназначение печать в файл, указав после служебного символа # конкретный номер соответственно открыто файла.
В VB.NET с возможностью печатать на форме с помощью данного оператора попрощались, наиболее близкий вариант, основанный на кодах из этих тем
[2008] VB.NET Equivalent Of VB6's "Print"
Прозрачность PictureBox'ов
Код:

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 1093127

'Public Sub WriteSomeText' , а где этот элемент брать? или его только вводить вручную?

Admiral 13-04-2009 21:19 1093144

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

GolfNorth 21-04-2009 11:42 1099806

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

Uzvern 21-04-2009 12:28 1099870

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

Admiral 21-04-2009 13:38 1099934

GolfNorth, по данному вопросу есть новые ссылки
VB.NET: What Happened to Control Arrays
Creating Control Arrays in Visual Basic .NET and Visual C# .NET
В этом отношении стало несколько сложнее по сравнению VB6 где на элементе на форме с помощью Ctrl+C и Ctrl+V можно было создать такой массив.
Uzvern, кстати 10ка не проскакивает в случаи сборки в VB 2008 SP1/.NET 3.5 SP1

Uzvern 21-04-2009 13:47 1099941

Admiral, спасибо. Я уже решил эту проблемку :)

ChrisRoB 14-01-2010 20:19 1320317

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

Admiral 14-01-2010 22:38 1320465

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 1330096

Подскажите как сделать!
Создать консольное приложение, которое выводит в текстовый файл с именем числа.txt, 15 случайных чисел, значения которых находятся в интервале от 100 до 300. Каждое число выводится с отдельную строчку файла.

Admiral 26-01-2010 11:01 1330129

19Garik90, про работу файла было чуть ранее. Пример генератора случайных чисел Generate a Random Integer Between Two Specified Values (.NET)
Вот небольшая программа
Код:

Imports System
Class RandomInConsole
    Shared Sub Main(ByVal CmdArgs() As String)
        If (CmdArgs.Length &lt;&gt; 2) And (CmdArgs.Length &lt;&gt; 3) Then
            Console.WriteLine(Command$() &amp; " 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 1363613

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

Admiral 08-03-2010 17:04 1363664

Приветствую TomSoyer.
В простейшем случаи
Код:

    Protected Overrides Sub OnMouseClick(ByVal e As System.Windows.Forms.MouseEventArgs)
        MsgBox("Координаты клика мыши в области формы: " &amp; e.Location.ToString, MsgBoxStyle.Information, "Отслежен клик мыши")
    End Sub


TomSoyer 08-03-2010 17:17 1363676

Всё это понятно. Только вот как в проект добавить этот обработчик? Просто прописать - скорее всего ничего не получится. Где-то должен быть ещё и вызов этого обработчика. Я сужу по С++, просто так случилось что нужно именно на VB 2008.

Admiral 08-03-2010 17:34 1363683

TomSoyer, это общий случай, если сама форма является самим объектом, на которую и выводится графика. Данный код как раз достаточно добавить в пределах видимости класса данной формы. Обработчик вызывается получив событие на окно (детали скрыты средой).
Если область какой-то элемент управления, нужно выбрать аналогичное событие, если такое имеется, для него. Или в конструкторе класса формы назначить ему такое (если это возможно).

TomSoyer 08-03-2010 18:00 1363705

Да, действительно. Механизм работает. Только в областях окна формы. Часть формы занята элементом PictureBox. Вот на этой области и нужен перехват клика мыши. Как на нём заставить работать этот механизм. Я уже голову сломал над этой проблемой, перерыл все менюшки/свойства, но так и не понял, как в VB добавлять обработчики событий.

Admiral 08-03-2010 18:24 1363719

TomSoyer, событие для PictureBox называется аналогично (без On).

Private Sub PictureBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseClick

TomSoyer 08-03-2010 19:24 1363769

Спасибо большое за оперативную помощь. После VC добавление событий в VB как-то не совсем удобно. Хотя, может это дело привычки... :up

andreyucrf 01-04-2010 20:17 1382718

Доброго времени суток!
Занимаюсь изучением vb2008 совсем недавно, на форуме похожих тем не нашел, посему вопросик, скажите пожалуйста, вот есть MDI формы, открываю одну, разворачиваю/сворачиваю, открываю вторую и она автоматом разворачивается, как сделать так чтобы вторая при открытии имела нормальный вид?
Заранее спасибо!

Medic84 18-04-2010 22:07 1395810

О. Хорошая темка.
У меня назрел вопрос. Я тут недавно начал изучать Visual Basic 2008 и никак не могу найти нормального самоучителя... Приходится по справке, из за этого никак не могу понять некоторые вещи: Классы, сабы и д.р. Никто не знает нормального хорошего самоучителя?

И еще... никто не может предложить модуля архивирования\разорхивирования файлов? Я нашел под C# и не могу преобразовать под VBA

Admiral 18-04-2010 23:26 1395866

Medic84 Чарльз Петцольда - Программирование для Microsoft Windows на Microsoft Visual Basic .NET, в 2-х томах.
Очень рекомендую. Насчёт актуальности должен предупредить, книга по .NET 1.1 (сегодня уже .NET4.0 наступает).
Но такие вещи как классы, сабы там рассмотрены достаточно хорошо (про классы в самом начале книги есть весьма хороший пример (про календарь)).

Насчёт непосредственно VBA не скажу. Но если есть код на C#, то получить его вариант в VB можно с помощью ОнЛайн "переводчика" - http://www.developerfusion.com/tools.../csharp-to-vb/
Специфические примеры может корректно и не перенесёт, а так вполне пригодный.

Большой Кол 24-04-2010 01:52 1399621

Доброй ночи, вы писали :

В простейшем случаи
Код:

Protected Overrides Sub OnMouseClick(ByVal e As System.Windows.Forms.MouseEventArgs)
MsgBox("Координаты клика мыши в области формы: " & e.Location.ToString, MsgBoxStyle.Information, "Отслежен клик мыши")
End Sub


А нельзя ли уточнить, я хочу получить координаты X Y курсора мыши . Координаты мыши на экране получить достаточно просто :
Dim X1 As Integer
Dim Y1 As Integer
X1 = MousePosition.X.ToString
Y1 = MousePosition.Y.ToString

Но мне нужны координаты относительно формы(или какого-либо объекта) откуда их извлечь? Т.е. как мне кажется должно быть какое-то свойство объекта которое их показывает, что-то типа - Объект.Мышь.координаты.Х но какой точный синтаксис? Или я ошибаюсь?

Admiral 24-04-2010 11:34 1399725

Большой Кол, нужно преобразовать координаты экрана в координаты клиентской формы (см. метод PointToClient).
А обратное преобразование осуществляется методом PointToScreen.

Большой Кол 24-04-2010 12:55 1399764

Простите пожалуйста , а нельзя ли привести пример кода, с PointToClient , так чтобы получить в переменные X1 и Y1 типа Integer координаты мыши на Windows Form ? Просто я только азы изучаю,вот сейчас до графики добрался, читаю я про PointToClient на MCDN , но там примеры мудреные(для меня) . Например я так понял, что тут замешен тип данных Point , я пока не сообразил как его в Integer преобразовать.

Admiral 24-04-2010 14:16 1399800

Большой Кол в большинстве случаев перевод значений с Point в две переменные Integer не требуется. Point это две переменные Integer объединённые в одну структуру.
Код:

    Protected Overrides Sub OnMouseMove(ByVal e As System.Windows.Forms.MouseEventArgs)
        'MsgBox(PointToClient(e.Location).ToString, MsgBoxStyle.Information, e.Location.ToString)
        MsgBox(PointToClient(Cursor.Position).ToString, MsgBoxStyle.Information, Cursor.Position.ToString)
        'Dim X As Integer = PointToClient(e.Location).X
        'Dim Y As Integer = PointToClient(e.Location).Y
    End Sub

В этом примере координаты в сообщении согласно клиентской формы, а в самом заголовке в координатах экрана.
Координаты e.Location уже даны относительно формы на экране, по этому для примера PointToClient взят Cursor.Position.
Если же в PointToClient подставить e.Location то метод может вернуть отрицательные координату(ы).

В сообщении 330 для перевода в переменную Integer применять ToString не требуется.

Большой Кол 24-04-2010 16:24 1399867

Огромное спасибо. PointToClient(Cursor.Position).ToString показывает именно то что мне нужно, осталось лишь придумать как выцедить из них цифры. PointToClient(e.Location) , по моему показывает данные от балды, но это не страшно, разберусь.

eldish 09-10-2014 10:52 2412970

Всем привет!
можете помочь?
при открытии веб страницы на WebBrouser надо сделать так что бы Вертикальный и горизонтальные Бары двинулись и показали одну точку
или какой то блок

XPEHOMETP 10-10-2014 11:24 2413422

Пардон, как Вы это (указание единственной, и при том, похоже, наперед заданной точки посредством скролл-баров) представляете на практике? Типа, хоть картинку можете нарисовать? А то я весь в неведении!

Devils0411 26-12-2014 18:00 2448648

Может кто подскажет, где ошибся?
Есть форма ввода данных. При попытке внести данные, нажав на кнопку, выскакивает сообщение (в отладке VS): "Общий член "SetPassword" для типа Object не найден"

Код:

Public Class FormPass

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Label1.Text = "Смена пароля для пользователя: " & vbCrLf & (FormLentaAD.ListBox2.SelectedItem)
        Me.CheckBox_chg.Checked = False
    End Sub

    Public Sub Buttonchg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Buttonchg.Click 'Кнопка "Сменить"
        Dim objUser As New Object
        If newpwd IsNot confimpwd Then
            objUser.SetPassword(Me.newpwd.Text.ToString)
            objUser.AccountDisabled = False
            'Установка смены пароля при первом входе
            If CheckBox_chg.Checked Then objUser.Put("pwdLastSet", 0)
        Else : MsgBox("Пароли не совпадают")
        End If
    End Sub
End Class


lxa85 26-12-2014 20:40 2448719

Devils0411, вы уверены, что у класса "Object" есть св-во SetPassword ?
Что-то мне подсказывает, что Object - это исходный класс для всех объектов. Т.е. довольно то таки типовая "болванка", из которой можно сделать что то интересное.
Код:

Dim objUser As New Object
создать объект objUser из класса Object
Код:

objUser.SetPassword() - ?

Devils0411 29-12-2014 13:44 2449543

lxa85,
Убрал переменную ObjUser, как класс. Подправил код

Код:

Public Sub Buttonchg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Buttonchg.Click 'Кнопка "Сменить"
        If newpwd Is confimpwd Then
            CurentUserObj.SetPassword(Me.newpwd.Text.ToString)
            CurentUserObj.AccountDisabled = False
            'Установка смены пароля при первом входе
            If CheckBox_chg.Checked Then CurentUserObj.Put("pwdLastSet", 0)
            MsgBox("Пароль для пользователя изменен")
        Else : MsgBox("Пароли не совпадают")
        End If
    End Sub
End Class

Но сравнения не происходит. Если я в форме, указываю пароль и подтверждение одинаковыми - выдается сообщение, что пароли не верны.
Т.е. сравнение переменных newpwd, confimpwd происходят некорректно.
Переменные задаются в TextBox'ах

Devils0411 29-12-2014 18:53 2449659

Проблему решил. Вот таким образом:
Код:

Select Case String.Compare(newpwd.Text, confimpwd.Text, False)
            Case Is = 0
                CurentUserObj.SetPassword(Me.newpwd.Text)
                CurentUserObj.AccountDisabled = False
                'Установка смены пароля при первом входе
                If Me.CheckBox_chg.Checked Then CurentUserObj.Put("pwdLastSet", 0)
                MsgBox("Пароль для пользователя изменен")
                Me.Close()
            Case Is <> 0
                MsgBox("Пароли не совпадают")
        End Select


Devils0411 26-01-2015 16:52 2461655

Вложений: 1
Всем доброго времени суток. Подскажите пожалуйста, есть проект.
При запуске приложения, создается файл ShablonMail.txt в кодировке UTF8 и первой строкой `. Этот символ является флагом для поиска.
При заполнении полей: кому:, Копия:, Тема:, Текст сообщения: и нажатии кнопки Сохранить изменения. Все происходит прекрасно.
При выборе темы и нажатии кнопки Заполнить поля, тоже все прекрасно.
А вот когда корректирую поля Кому:, Копия, Текст сообщения при неизменности Темы и нажимаю Сохранить изменения, происходит запись в конец файла, а необходимо перезапись Кому: и Копия: в файле. Каким образом это можно сделать?

lxa85 26-01-2015 18:47 2461733

Devils0411, сейчас переустанавливаю Ос, обовляюсь до 10. на неделе посмотрю

Devils0411 27-01-2015 08:21 2461946

lxa85, спасибо. Буду ждать, если к тому моменту не найду способ :)
В принципе, как сделать чтение и запись в файл - знаю, а вот как сделать замену строки к сожалению нигде толком не нашел.

Devils0411 28-01-2015 16:55 2462751

Еще один вопрос.
Есть функция:
Код:

    Public Function CountCc() As Integer

        Dim objAllUser, objCurUser, objUser As Object
        objCurUser = GetObject(CurentOUPathStr)
        If Mid(CurentOUPathStr, 11, 3) = "EWM" Then
            objAllUser = GetObject("LDAP://ou=Users," & CurentPathDim(6) & "," & CurentPathDim(5) & ",ou=bla,dc=bla,dc=bla,dc=bla")
        Else
            objAllUser = GetObject("LDAP://ou=EWM," & Mid(CurentOUPathStr, 8))
        End If

        For Each objUser In objCurUser
            If Not objUser.sAMAccountName Is Nothing Then
                CountCc += 1
            End If
        Next
        Return CountCc
    End Function

Она вызывается следующим кодом с последующим выводом количества пользователей в форме
Код:

cur = CountCc()
Me.Label5.Text = "Количество пользователей" & vbCrLf & "в текущем контейнере: " & cur

Перефразирую. Как в переменную objAllUser записать общее количество объектов "корневом" контейнере?
В данном случае, корневой контейнер - "LDAP://ou=Users," & CurentPathDim(6) & "," & CurentPathDim(5) & ",ou=bla,dc=bla,dc=bla,dc=bla"
т.е. нужно добавить фильтр (objectClass = user) к запросу GetObject("LDAP://ou=Users," & CurentPathDim(6) & "," & CurentPathDim(5) & ",ou=bla,dc=bla,dc=bla,dc=bla")

Devils0411 04-02-2015 21:53 2466483

Еще одна задачка, которую не могу понять как решить. Есть CheckListBox, в котором два пункта с флажками. При выборе двух пунктов, как определить, какой пункт был выбран последним?

Код:

        Dim x As Integer
        Dim gchk, gchk1 As String
        Dim itemChecked As Object
        Const quote As String = """"
        For Each x In CheckedListBox1.CheckedIndices
            MessageBox.Show("Index#: " + x.ToString() + ", is checked. Checked state is:" + _
          CheckedListBox1.GetItemCheckState(x).ToString() + ".")
            gchk = CheckedListBox1.GetItemCheckState(0).ToString()
            gchk1 = CheckedListBox1.GetItemCheckState(1).ToString()
        Next

        For Each itemChecked In CheckedListBox1.CheckedItems

            ' Use the IndexOf method to get the index of an item.
            MessageBox.Show("Item with title: " + quote + itemChecked.ToString() + quote + _
                            ", is checked. Checked state is: " + _
                            CheckedListBox1.GetItemCheckState(CheckedListBox1.Items.IndexOf(itemChecked)).ToString() + ".")
        Next

Т.е. нужно запомнить флажков было при первом выборе, а потом на основе этих данных изменить положение флажков.
К примеру выбрали мы первый пункт и поставили флажок. После мы выбрали второй пункт, и вот тут нам нужно чтобы флажок с первого пункта снялся. Поставили снова флажок на первом пункте и флажок снялся со второго пункта и т.д.


Время: 21:38.

Время: 21:38.
© OSzone.net 2001-