Страница: 1 |
Страница: 1 |
Вопрос: Процедуры в VB .NET
Добавлено: 02.02.08 19:08
Автор вопроса: Дилетант
Видел давнишнюю тему с подобным вопросом, написал в неё, но что-то она не всплывает, так что создаю новую.
Проблема: процедуры, помещённые в модуль, не работают при вызове из формы. Call, не Call - один этот самый.
Воспользовался советом Ссылка_на_форму.Имя_процедуры() - не помогает. При этом функции (тоже из модуля) работают нормально (если вызваны прямо из формы).
Процедуры тоже вызывают эти функции. Может быть, здесь собака зарыта? Правда, компилятор вроде всё распознаёт, всплывают правильные подсказки, нет волнистых линий.
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
Skywalker
ICQ: 300-70-6пятьЪ
Вопросов: 62
Ответов: 545
Web-сайт:
Профиль | | #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
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
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
bPre = False
strTg1 = "<p>"
strTg2 = "</p>"
lblTip.Text = strTg1
 oItProc()
End Sub
Собственно, зачем я переписываю в VB .Net?
Это редактор HTML-кода с некоторыми дополнительными опциями для быстрой обработки больших книжных текстов. Попался текст с цитатами на исландском языке, а там 13 нестандартных букв (с учётом больших и маленьких - 26). Текстовые контролы VB6 неправильно читают unicode, так что приходится руками, хотя и написал код перевода определённого диапазона символов в"&#" & CStr(AscW(strLtr)) & ";". Сделал отдельную утилиту в VB .Net. Она работает, но мне захотелось присобачить эту опцию в большой редактор. Вот и приходится его переписывать.
Номер ответа: 3
Автор ответа:
Skywalker
ICQ: 300-70-6пятьЪ
Вопросов: 62
Ответов: 545
Web-сайт:
Профиль | | #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-сайт:
Профиль | | #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, а я сидел и исправлял.
Спасибо.