Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Процедуры в VB .NET Добавлено: 02.02.08 19:08  

Автор вопроса:  Дилетант
Видел давнишнюю тему с подобным вопросом, написал в неё, но что-то она не всплывает, так что создаю новую.
Проблема: процедуры, помещённые в модуль, не работают при вызове из формы. Call, не Call - один этот самый.
Воспользовался советом Ссылка_на_форму.Имя_процедуры() - не помогает. При этом функции (тоже из модуля) работают нормально (если вызваны прямо из формы).
Процедуры тоже вызывают эти функции. Может быть, здесь собака зарыта? Правда, компилятор вроде всё распознаёт, всплывают правильные подсказки, нет волнистых линий.

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #1
Добавлено: 02.02.08 19:29
кинь код чтоли, ибо, если я правильно понял, так работает

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        msg()
    End Sub
End Class

'Модуль1
Module Module1
    Public Function text() As String
        Return "hello"
    End Function
    Public Sub msg()
        MsgBox(text())
    End Sub
End Module

Ответить

Номер ответа: 2
Автор ответа:
 Дилетант



Вопросов: 13
Ответов: 30
 Профиль | | #2 Добавлено: 02.02.08 20:26
Вот кусок кода, правда, там много завязано друг на друга, и кусок получился большой. В VB6 это всё работает. "Макияж" для VB .Net, вроде, сделал: компилятор не чертит волнистых линий и говорит, что 0 Errors.

Это процедуры в модуле mdlProc
Public Sub PreProc()
strField = TxtConvert(strField, strTg1, strTg2)
        If bChoose = True Then frm.RTB1.Text = strField Else frm.RTB1.SelectedText = strField
End Sub

Public Sub ParagraphProc()
        strField = PrgphConvert(strField, strTg1, strTg2)
        If bChoose = True Then frm.RTB1.Text = strField Else frm.RTB1.SelectedText = strField
End Sub

Public Sub DoItProc()
        If bChoose = True Then
            strField = frm.RTB1.Text
            If bPre = True Then PreProc() Else ParagraphProc()
        Else
            If bNewStr = True Then
                If frm.RTB1.SelectionStart = 0 Then
                    strField = frm.RTB1.SelectedText
                    If bPre = True Then PreProc() Else ParagraphProc()
                ElseIf Mid(frm.RTB1.Text, frm.RTB1.SelectionStart - 1, 2) = vbNewLine Then
                    strField = frm.RTB1.SelectedText
                    If bPre = True Then PreProc() Else ParagraphProc()
                Else
                    malava = MsgBox("Начните с новой строки", vbOKOnly, "Ошибка ввода";)
                End If
             Else
                    strField = frm.RTB1.SelectedText
                    If bPre = True Then PreProc() Else ParagraphProc()
            End If
        End If
End Sub

(объявление Public frm As New frmMain есть, так что тут всё в порядке, переменные объявлены Public в модуле)

А это функции в модуле mdlFunc
Public Function TxtConvert(ByVal Src As String, ByVal Tg1 As String, ByVal Tg2 As String) As String
        Dim txtHtml As String
        txtHtml = Tg1 & Src & Tg2
        TxtConvert = txtHtml
End Function

Public Function PrgphConvert(ByVal Src As String, ByVal Tg1 As String, ByVal Tg2 As String) As String
        Dim txtHtml As String
        txtHtml = Tg1 & Replace(Src, (Chr(13) & Chr(10)), _
    Tg2 & (Chr(13) & Chr(10)) & Tg1) & Tg2
        PrgphConvert = txtHtml
End Function

А вот код в форме frmMain
Private Sub mnuP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuP.Click
        bPre = False
        strTg1 = "<p>"
        strTg2 = "</p>"
        lblTip.Text = strTg1
        ;DoItProc()
End Sub

Собственно, зачем я переписываю в VB .Net?
Это редактор HTML-кода с некоторыми дополнительными опциями для быстрой обработки больших книжных текстов. Попался текст с цитатами на исландском языке, а там 13 нестандартных букв (с учётом больших и маленьких - 26). Текстовые контролы VB6 неправильно читают unicode, так что приходится руками, хотя и написал код перевода определённого диапазона символов в"&#" & CStr(AscW(strLtr)) & ";". Сделал отдельную утилиту в VB .Net. Она работает, но мне захотелось присобачить эту опцию в большой редактор. Вот и приходится его переписывать.

Ответить

Номер ответа: 3
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #3
Добавлено: 02.02.08 20:42
твоя проблема в
Public frm As New frmMain
не надо так делать
нада писать например

Public Sub PreProc()
strField = TxtConvert(strField, strTg1, strTg2)
        If bChoose = True Then frmMain.RTB1.Text = strField Else frmMain.RTB1.SelectedText = strField
End Sub

Ответить

Номер ответа: 4
Автор ответа:
 Дилетант



Вопросов: 13
Ответов: 30
 Профиль | | #4 Добавлено: 02.02.08 21:27
Я так и делал, а компилятор ругался.

Ответить

Номер ответа: 5
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #5
Добавлено: 02.02.08 21:42
да не должен, напиши как ругается, в крайнем случае можешь сделать так

Public Sub PreProc(ByVal frm as Form)
strField = TxtConvert(strField, strTg1, strTg2)
        If bChoose = True Then frm.RTB1.Text = strField Else frm.RTB1.SelectedText = strField
End Sub

и в процедуру передавать форму
PreProc(frmMain)

или еще как нибудь типа
Public frm as New Form = frmMain

Ответить

Номер ответа: 6
Автор ответа:
 Дилетант



Вопросов: 13
Ответов: 30
 Профиль | | #6 Добавлено: 02.02.08 21:51
Странно. Сейчас и не ругается, и работает. А ведь именно так у меня и было в VB6, а я сидел и исправлял.
Спасибо.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам