Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - Visual Basic 2008

Ответить
Настройки темы
VBA - Visual Basic 2008

Аватара для Uzvern

Старожил


Сообщения: 161
Благодарности: 4


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Uzvern
Дата: 24-04-2008
Описание: Забыл дописать название темы. Прошу простить.
Подскажите как сделать так : допустим, если нажать на форме правой кнопкой мыши, то вылетет MsgBox(123), а если нажать левой, то MsgBox(098).

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

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

Отправлено: 17:47, 24-04-2008

 

Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 03:52, 30-05-2008 | #91



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

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


Аватара для Uzvern

Старожил


Сообщения: 161
Благодарности: 4

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 12:16, 30-05-2008 | #92


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


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

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

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

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

-------
Ehhh.. what's up, doc?..


Отправлено: 15:18, 30-05-2008 | #93


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:03, 30-05-2008 | #94


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


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

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

-------
Ehhh.. what's up, doc?..


Отправлено: 17:33, 30-05-2008 | #95


Аватара для Uzvern

Старожил


Сообщения: 161
Благодарности: 4

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 21:45, 30-05-2008 | #96


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


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а справки. Если интерфейс интуитивно понятный то и справка не нужна. Тем не менее, правила хорошего тона обязывают её существование и дистрибуцию вместе с программой.

Отправлено: 15:07, 31-05-2008 | #97


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


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

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

-------
Ehhh.. what's up, doc?..


Отправлено: 15:33, 31-05-2008 | #98


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 15:57, 31-05-2008 | #99


Аватара для Uzvern

Старожил


Сообщения: 161
Благодарности: 4

Профиль | Сайт | Отправить PM | Цитировать


Что делает эта комманда :
Код: Выделить весь код
TextBox1.Undo()
?

Отправлено: 15:16, 01-06-2008 | #100



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - Visual Basic 2008

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBA - MS Visual Basic 2008 Expres Edition файлы проекта Anton Naumov Программирование и базы данных 7 14-05-2010 14:09
VBA - Visual basic 2008 Anton Naumov Программирование и базы данных 1 02-01-2010 22:35
visual basic 6 иоанн Хочу все знать 1 27-04-2009 18:51
visual basic 6 guma Программирование и базы данных 1 26-04-2007 20:41
Visual basic carlos Программирование и базы данных 1 04-08-2003 02:03




 
Переход