Показать полную графическую версию : Visual Basic 2008
Страниц :
1
[
2]
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
В VB2008м (кроме General Declaration как и в VB6, есть так называемая Form1 - Declaration) используется модель классов, сама Form1 к классу, так вот сразу здесь можно объявить переменны/константы и т.д. относящиеся ко всей форме этого класса.
Public Class Form1
Dim A As Integer
End Class
А объявление в таймере существует только в момент исполнения/срабатывания таймера.
так вот сразу здесь можно объявить переменны/константы и т.д. относящиеся ко всей форме этого класса. »
Это я знаю. Мне интерестно что там с таймером...
Таймер запустился, обозначил переменную i прибавил к ней единицу и закончил работу, и никто про i так и ничего не узнал. Заново запустился и по новой i объявил…
ааа....ну это то я знаю как бы ещё с самого начала как только увидел VB.
Вот ещё сабж :
у меня 8 ТекстБосов. В каждый текстбокс генерируется произвольльное число от 0 до 1 (Int(rnd(1))). Получается, если в каждый ТекстБокс сгенерируется 1, значит во всех ТекстБоксах будет 1, а мне надо чтобы в 4 (не меньше и не больше) каких-то (произвольных) ТестБокса сгенерировалось 1 или 0, точно так же если значение стоит 5, то генерируется либо 5 "0", либо 5 "1". кажется подробно объяснил.
Кстати, Admiral, посоветуй хорший учебник по VB6 (на советском), просто у меня есть, но там все урезано по максимуму. :(
Сделал вот так, но это не вариант. Нужно чтобы высчислялось сколько "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
Как можно именять прозрачность формы?
Me.Opacity и что нужно дальше писать чтобы работало?
Просто мне нужно, если переменная i = 1 , тогда прозрачность равна 90%. Если i = 2 , тогда прозрачность равна 80% и т.д. до 0%
А нет. Все. Разобрался :) значение должно быть в виде : 90% = 0.9 ; 80% = 0.8 и т.д.
Незачем генерит каждый раз, лучше один раз занести результат в переменной и потом с ней проводить операции.
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 А. Ананьев, А. Федоров (http://www.ozon.ru/context/detail/id/92427/)
Микаэл Хальворсон Microsoft Visual Basic 6.0 для профессионалов Шаг за шагом
Из электронных (в печатном виде продукт не выходил) приглянулся
VISUAL BASIC 6 и VBA. Для профессионалов (http://www.bolero.ru/product-38645295.html)
Ну и конечно же
Сайты о Visual Basic (http://forum.oszone.net/thread-30437.html)
+ к той теме ресурс из современности http://vbnet.ru/
Так же McDAK подсказал, как правильнее всего изучать Бейсик этой ссылкой
http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/VBInHistory/445.mspx >> (http://forum.oszone.net/post-354122-7.html)
Конечно, историю нужно помнить, но останавливаться на ней долго не стоит нужно идти вперёд и как сказал ivank: VB6.0 и VB.Net это _абсолютно_ разные язики >> (http://forum.oszone.net/post-350813-5.html). Но в дело вмешалось Microsoft и прекращает поддержку VB 6 (http://forum.oszone.net/thread-104932.html) тем самим призвало применять vb.net там, где ранее достаточно было vb6
Так что вот ещё тема Visual_Basic 2005 выбор литературы (http://forum.oszone.net/thread-83262.html)
По 2008й ещё очень мало переведено литературы, впрочем как и по любым другим компонентам студии 2008.
Какая б не было книга, главное желание.
P.S.
На счёт прозрачности и книг, то в источнике VISUAL BASIC 6 и VBA. Для профессионалов (http://www.bolero.ru/product-38645295.html) сведенья натолкнули на мысль как использовать прозрачность в 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
На практике прозрачность не очень популярная функцыя.
:o :clapping:
зачет!
А что такое Select Case? :)
И как можно добавлять значения из текстового файла в ComboBox? :happy:
Вот кстати с вашей помощью сделал игровой аппарат. Я начинающий, поэтому для меня это была одна не из лёгких задач.
Select Case это выбор по определённому значению. Все равно не совсем там катит, лучше через массив работать. Кстати, там действительно необходимо такое число ТекстБоксов, может лучше подойдут массивы?
Вместо того что б писать
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
Считать в переменную или сразу построчно считывать через свойство ComboBox1.Items().Add »
А по подробней можно?
Считывать из переменной будет так : ComboBox1.Items().Items(*перемнная*) ? Или как-то по другому?
Что это значит : ComboBox1.Items().Add ? Добавлятьв перменную? ComboBox1.Items().Add(*перемнная*) ?
Ещё. Что означает в свойствах объекта : ImeMode? и как мне можно открыть папку (Файл открывать при помощи Shell - за это отдельное спасибо. Теперья знаю как можно создать свой авторан :biggrin:) ?
Или считываем построчно файл, как в девятом посте, на тот случай если инфа ещё будет нужна в виде переменной, что б не считывать заново и не выспрашивать её у ComboBox1 тогда просто пишем, в общем случаи
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 есть даже таблица соотношений. Но я про него не знал, ибо не было в нём надобности.
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 режим даёт возможность ввод японских иероглифов со стандартной клавиатуры.
На счёт игры и её дизайн, так держать, выполнена она в хакерском стиле – главное творчество, а опыт в средствах разработки даст рост.
А как можно сделать чтобы программа сворачивалась в трей? и если щелкаешь на неё правой кнопкой мыши (когда она в трее) вылезал ContextMenuStrip?
+ как сделать проверку, если в ТекстБоксе есть какие-либо символы, то они убираются из ТекстБокса, либо чтение происходит до них или после. или если существует какие-либо символы, то выполняетя определенное дейстиве, например как обычно MsgBox(123) :)
С тре никогда не связывался, с ним в VB6 было больше мороки, в Vb2008м компонент на палитре есть, но нет желание работать с тре. Как работать с тре можно посмотреть вот здесь http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2652568&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
С тре никогда не связывался, с ним в VB6 было больше мороки, в Vb2008м компонент на палитре есть, но нет желание работать с тре. »
Круто! Спасибо. Разобрался.
В что делаеют вот эти как бы их назвать...действия... : Handles Me.Validated и Handles Me.Validating
И как сделать проверку, если окно свернуто/развенуто/находится в нормальном состоянии.
Вот ещё сабж: как это можно реальзовать
Ху***** в прогу окно текстовое , делаешь чтобы в него подгружалась интренет страница , после подгрузки страницы в окно ишешь определённый текст и всё а дальше если есть текст то ...... Нету текста .......
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, на палитре нужно поискать.
А как сделать это? :(
в прогу окно текстовое , делаешь чтобы в него подгружалась интренет страница , после подгрузки страницы в окно ишешь определённый текст и всё а дальше если есть текст то ...... Нету текста .......
Возможно и с помощью 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
Начинаю хоть что-то потихоньку понимать и соображать :)
Как добавлять и удалять значения из реестра?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.