Показать полную графическую версию : Visual Basic 2008
Страниц :
[
1]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Подскажите как сделать так : допустим, если нажать на форме правой кнопкой мыши, то вылетет MsgBox(123), а если нажать левой, то MsgBox(098).
Спасибо за внимание.
>>Блин, не дописал в названии темы : Действие при нажатии правой кнопки
Alexej77
24-04-2008, 21:06
В процедуре события MouseDown определяй, какая кнопка нажата, в нее передаются нужные параметры.
Alexej77, спасибо! Оперативно!
Теперь всегда буду тут спрашивать. )
P.S. Тему можно не закрывать. Я скоро вернусь с новым заданием :)
Вопрос № 2:
Можно ли как-то изменить название кнопок в MsgBox ? Например в место кнопки "Ок" - сделать кнопку "Хорошо", или все-таки придется делать дополнитьельную форму?
Придётся брать форму, ибо MsgBox уже предустановлен.
Ещё вопрос :
Как открыть текстовый файл ПОЛНОСТЬЮ, а НЕПОСТРОЧНО.
В VB6 Input$(LOG(1),1) в 8 не катит :(
Я в 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)
Вообщем-то сабж:
Как сделать, чтобы программа вела лог?
Например у меня 3 TextBox и 1 кнопка.
Необходимо чтобы при нажатии на кнопку - программа записывала значения TextBox каждое в отдельную строчку.
Например: Нажал на кнопку в файле появились строки:
123
456
789
Нажал ещё раз, к ним прибавились ещё одни только уже через строчку и результат будет таким :
123
456
789
098
765
432
и так до бесконечности или до определенного размера файла, дальше начинается перезапись.
И ещё вопросик на счет файлов тоже:
OpenMode.Binary
чет я в VB8 в них разобраться несмог. как записывать посторчно и как считывать, тоже построчно.
Между логом и того примера с трёма 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. (см первый пример в посте)
Do Until EOF(1)
LineOfText = LineInput(1)
AllText = AllText & LineOfText & vbCrLf
Loop »
А вот тут можно поподробней, кроме цыкла?!
Т.е. что значит :
EOF(1)
и кстати интереисует вопрос: что значит вот этот знак "&"
OpenMode.Binary - бинарный доступ, строк как таковых нету, только группы определённых, понятных кодеру, данных. Полная аналогия как и в VB6 »
Значит нельзя например из первой сторки считать с 3 байта, а со второй с 5?
Кстати какие ещё циклы бывают, кроме:
If Then Else
End If
Do While/Until
Loop
Do
Loop While/Until
For
Next
И в каких случаях они используются (кроме тех что написал).
С Праздничком!
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 удобный тем, что в нём изначально встроенный счетчик переменной, которую можно использовать в цикле. В других конструкциях цикла такую переменную необходимо вносить самостоятельно.
& - читается как аппендикс. В данном конкретном случаи означает прибавить символы к другим символам, и сохранить строчку результат в переменной AllText. »
Т.е. это что-то типа заменителя And?
Как минимизировать форму (свернуть в пуск)? Просто нарисовал оформление, отключил все кнопки в Свойствах формы, поставил FixedSingle, убрал название формы. Вот теперь надо чтобы при нажатии на кнопку она (форма) сворачивалась в пуск и в пуск было написано, например "123" а в названии формы ничего небыло. Думая мало кто поймет смысл данного сообщения, поэтому даю скрин какой я хочу получить результат.
Или может как-то можно переписать оформление? А то стандартные кноппки (Свернуть, Развернуть, Закрыть) как-то не катят.
Да.
По простому, можно в событи на сворачивания установить возврат форме заголовка с названием 123, а на разворачивании обратно прятать.
Admiral, а как это сделать? Дай код плз. + При несвернутой форме желательно тоже чтобы название было.
Как её при нажатии на кнопку ( не стандартную, а на форме ) сворачивать?
Можно считать первые 3 байт, далее следующие за ним 5 байт »
И на это тоже код плз :)
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 (http://www.vbnet.ru/articles/showarticle.aspx?id=105)
Тут и стандартное окно подменяют своим, и название когда оно не свёрнуто есть.
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.
Как сделать чтобы при зажатии Label1 и перетаскивании мыши позиция формы менялась относительно мыши, т.е. если сказать проще, то у меня Form1.FormBorderStyle=None + есть Label1, нужно организовать, чтобы при зажатии Label1 и перетаскивании мыши, окно передвигалось в сторону мыши. Вообщем сделать функцию перетаскивания.
Вот ещё :
Timer1.Tick
Dim i
i=i+1
как сделать так : если i=четному числу(2,4,6 и т.д.), то вылетает MsgBox(123), а если не четному(1,3,5 и т.д.), то вылетет MsgBox (098)
P.S. Процесс может прдолжаться до бесконечности, проэтому прописывать все значения бесполезно
Ещё вопросик: Как при помощи VB8 можно запускать файлы, т.е. нажал на кнпку и запустился файл?!
И можно ли как-то реализовать комманду : Пуск=>Выполнить, т.е. есть текстовое поле и кнопка. Вводим например cmd, жмем на кнопку и заускается коммандная строка.
Примитивно, можно сделать вот так
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овского в программах нет.
ооо, спс.
Во первых, предложенный код не будет работать по задуму, так как объявление (считай обнуление) переменной будет каждый раз при срабатывании таймера. Вынести её надо в секцию
General Declaration »
А вот тут можно попродробней?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.