Совет дня

Общие советы

Как сделать форму неподвижной?
Как выгрузить VB-форму нажатием Esc?
Использование кавычек в VB
Развернуть окно на весь экран
Управление кнопками Свернуть/Развернуть на MDI-форме
Управление длиной элемента списка ComboBox
Определить, является ли число четным или нечетным
Нажатие кнопки из другой формы
Доступ ко всем элементам управления на форме
Способы переключения флагов
Нумерация версий программ
Изменение надписи на Русский в свойствах exe-файла
Пишите комментарии в программе
Удаляйте код после удаления элемента управления в проекте
  1. Как сделать форму неподвижной?

    Присвойте свойству формы Moveable значение False, и вашу форму нельзя будет перетаскивать в другое место

  2. Как выгрузить VB-форму нажатием Esc?

    Эту задачу очень просто решить с помощью такого кода:

    Private Sub Form_KeyPress(KeyAscii As Integer)  
      If KeyAscii = 27 Then  
       Unload Me  
      End If  
    End Sub
  3. Использование кавычек в VB

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

    Dim str As String
    str = "Л.Толстой - автор произведения " & """" & "Война и мир!" & """"
    MsgBox str
    Гораздо лучше написать
    str = "Л.Толстой - автор произведения " & Chr(34) & "Война и мир!" & Chr(34)
  4. Развернуть окно на весь экран
    Если вам необходимо развернуть окно на весь экран, закрыв при этом и панель задач, то просто присвойте свойству BorderStyle значение None, a свойству WindowState значение 2 (Maximized). Все! Можно добиться такого же эффекта и с формой, имеющей заголовок с помощью API. Для этого используем функцию GetSystemMetrics:
    ' Код для Form_Load
    Dim wid As Long
    Dim hgt As Long
    
    ' Получим размеры экрана, включая панель задач
    wid = GetSystemMetrics(SM_CXSCREEN)
    hgt = GetSystemMetrics(SM_CYSCREEN)
    
    ' Подгоняем форму под этот размер
    Move 0, 0, _
            ScaleX(wid, vbPixels, vbTwips), _
            ScaleY(hgt, vbPixels, vbTwips)
  5. Управление кнопками Свернуть/Развернуть на MDI-форме
    В отличие от других форм MDI-формы не имеют свойств MinButton и MaxButton, с помощью которых можно включать или отключать кнопки Minimize и Maximize на форме. Если добавить следующий код к событию Load родительской MDI-формы, то он отключит обе эти кнопки. Если же вы хотите отключить только одну из них, то поставьте знак комментария у соответствующей строки:
    Private Sub MDIForm_Load()
      Dim lWnd As Long
      lWnd = GetWindowLong(Me.hWnd, GWL_STYLE)
      lWnd = lWnd And Not (WS_MINIMIZEBOX)
      lWnd = lWnd And Not (WS_MAXIMIZEBOX)
      lWnd = SetWindowLong(Me.hWnd, GWL_STYLE, lWnd)
    End Sub
    Затем введите следующий код (который включает объявления необходимых API- функций) в текст самого BAS-модуля:
    Option Explicit
    ' описание API-функций и констант
    Public Declare Function SetWindowLong Lib _
         "user32" Alias "SetWindowLongA" (ByVal _
         hWnd As Long, ByVal nIndex As Long, ByVal _
         dwNewLong As Long) As Long
    Public Declare Function GetWindowLong Lib _
         "user32" Alias "GetWindowLongA" (ByVal _
        hWnd As Long, ByVal nIndex As Long) As Long
    Public Const WS_MINIMIZEBOX = &H20000
    Public Const WS_MAXIMIZEBOX = &H10000
    Public Const GWL_STYLE = (-16)
  6. Элемент управления ComboBox, в отличие от текстового окна, не имеет свойства MaxLength. Однако нет ничего проще, чем добавить недостающее свойство. Для этого достаточно ввести в событие KeyPress элемента управления ComboBox следующий код:
    Private Sub Combo1_KeyPress(KeyAscii As Integer)
    ' Если пользователь попытается нажать одиннадцатую клавишу и
    ' если эта клавиша не Backspace, то отменить данное событие
        Const MAXLENGTH = 10
        If Len(Combo1.Text) >= MAXLENGTH And KeyAscii <> vbKeyBack Then
          KeyAscii = 0
        End If
    End Sub
    Константа MaxLength может иметь любое значение. Кроме того, вместо Backspace вы можете использовать любые другие клавиши. Для этого просто введите их значения KeyAscii, как показано в примере с клавишей Backspace
  7. Определить, является ли число четным или нечетным

    Если вам нужно узнать, является ли число четным или нечетным, то можно использовать оператор MOD. Если число делится без остатка, то оно четное. Но этот способ не совсем эффективен, так как за кулисами бейсик применяет деление числа, и многочисленные вызовы этого оператора сильно загружают процессор. Лучше использовать битовую операцию AND. В этом случае Число AND 1 возвращает 1 для нечетных чисел и 0 для четных
    Пример

    Dim blnIsOdd As Boolean
    blnIsOdd = CLng(Text1.Text) And 1
    If blnIsOdd Then
    MsgBox "Нечетное число"
    Else
    MsgBox "Четное число"
    End If
    Вводите числа в текстовое поле и увидите результат
  8. Нажатие кнопки из другой формы
    Если у вас на форме есть кнопка, то ее нажатие можно вызвать строчкой
    Command1_Click
    Но если у вас две формы, то из второй формы у вас не получится нажать на кнопку первой формы таким же образом. Здесь вам на помощь придет свойство Value кнопки. Поместите код, скажем на кнопке второй формы Form2
    Form1.Command1.Value = True
    и кнопка на первой форме будет нажата
  9. Доступ ко всем элементам управления на форме

    Если ваш проект содержит, например, множество кнопок и вам нужно, например, скрыть все кнопки, то можно писать так Command1.Visible= False Command2.Visible= False и т.д. Но есть способ лучше.

    Dim myControl
    For Each myControl In Me.Controls
       If TypeOf myControl Is ComandButton Then
        myControl.Visible = False
      End If
    Next
  10. Способы переключения флагов

    Довольно часто приходится использовать переключатели-флаги, которые имеют значения "ноль/не ноль". Новички используют такую конструкцию:

    If myCode Then myCode = False Else myCode = True
    

    Но лучше использовать:

    myCode = Not myCode    ' состояние флага 0 или -1
    
  11. Нумерация версий программ, созданных на VB, может быть простой, если вы воспользуетесь функцией Version Numbering при создании EXE-модуля. Для этого щелкните кнопку Options диалогового окна Make Project, а затем установите флажок Auto Increment во вкладке Make диалогового окна Project Properties.

    Номер версии программы состоит из трех элементов: Major, Minor и Revision. Функция Auto Increment, если она выделена, будет автоматически увеличивать номер Revision на единицу при каждом запуске команды Make Project для конкретного проекта.

    Обычно информация о версиях программы используется в форме About. Для этого просто добавьте метку с именем lblVersion и введите следующий код для вашей формы:

    lblVersion.Caption = "Версия: " & App.Major & _
        "." & App.Minor & "." & App.Revision
    

    Если для вашей программы номер Major равен 2, номер Minor — 1 и номер Revision — 12, то метка выведет на экран: "Версия: 2.1.12"

  12. Изменение надписи на Русский в свойствах exe-файла
    Если вы смотрели на свойства файла *.exe, созданного в VB, то замечали, что на вкладке Версия напротив надписи Язык выводится Английский. Наверняка, у вас было желание исправить эту надпись на Русский. Откройте файл любым hex-редактором(напр. UltraEdit). В конце файла ищите ресурс VS_VERSION_INFO и ищите там: 30 00 34 00 30 00 39 (код английского языка 0x0409, написанный юникодом), и правишь второй символ 30 на 31, получится 0x0419 - код русского языка. Также ищите слово Translation; после него идут символы 0904h; правьте на 1904h. Все! Теперь в свойствах файла будет написано Русский Также удобно пользоваться редактором ресурсов(напр. Resourse Hacker) - с ним меньше мороки.
    (Совет прислал
    Дмитрий Козырев)
  13. Пишите комментарии в программе.Комментарии не включается в состав исполняемого модуля и не влияют на его размеры и скорость выполнения
  14. Удаляйте код после удаления элемента управления в проекте
    При удалении какого-либо элемента управления из формы код, соответствующий этому элементу управления, не удаляется. Он переносится в секцию General Declaration, и хотя он не мешает программе, из-за этого увеличивается размер исполняемого файла. Кроме того, если вы создадите новый элемент управления с таким же именем, сохранившийся код будет принадлежать этому новому компоненту, так как событие имеет то же самое имя