Подстрочный шрифт в пользовательских элементах управления

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Подстрочный шрифт в пользовательских элементах управления

Сообщение AnarCky » 12.01.2007 (Пт) 18:13

Вот... Пытаюсь сделать свой элемент управления - текстовое окно (наследует от RichTextBox), которое само распознает формулы хим веществ и в зависимости от месторасположения цифры делает ее подстрочной. Но... Почему то не получается. Свойство SelectionCharOffset тоже не работает. По совету из этого топика пытался вот таким кодом подобрать на глаз величину свойства. Получается. Оптимальная величина где-то "-5". Но это отдельно.

Код: Выделить всё
     Private Sub Button37_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button37.Click
        Dim n As String
        n = TextBox1.Text
        RichTextBox1.SelectionCharOffset = CInt(n)
    End Sub


А в этом коде не работает. :( И когда я после цифры ввожу еще одну цифру, то виснет намертво. Помогите пожалуйста. И тем быстрее тем лучше. :)

Код: Выделить всё
Public Class ChemicalRtxt
    Inherits System.Windows.Forms.RichTextBox

    Private Sub ChemicalRtxt_KeyPress(ByVal sender As Object, _
                ByVal e As System.Windows.Forms.KeyPressEventArgs) _
                Handles MyBase.KeyPress
        Dim str, str2 As String, int, int2, KA As Integer
        Dim fn As New Font("Comic Sans MS", 11)
        Dim fs As New Font("Comic Sans MS", 5)
        KA = Asc(e.KeyChar)
        Select Case KA
            Case 48 To 57, 65 To 89, 96 To 121, 8, 13, 43, 175
            Case Else
                KA = 0
        End Select
        str = Me.Text
        For int = 0 To 9
            int2 = str.IndexOf(CStr(int))
            Do While int2 <> -1
                Try
                    str2 = str.Substring(int2 - 1, 1)
                Catch
                    Select Case str2
                        Case str2 = " "
                        Case str2 = "="
                        Case str2 = "+"
                        Case Asc(str2) = 65 To 89, 96 To 121
                            'вот сюда я пытался вставить операторы "понижения" шрифта до подстрочного
                            Me.Font = fs
                            Me.SelectionCharOffset = -500
                            'почему то не работает
                        Case CInt(str2) = 0 To 9
                            'если CInt(str2) подстрочный, то надо "понизить" и следующую цифру
                            'вот сюда надо вставить операторы "понижения" шрифта до подстрочного
                    End Select
                End Try
            Loop
        Next
    End Sub
End Class
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 17.01.2007 (Ср) 19:35

Че, совсем никто не знает?! :o
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 20.01.2007 (Сб) 18:41

Появился новый вариант проги:

Код: Выделить всё
    Private Sub ChemicalRtxt_KeyPress(ByVal sender As Object, _
                ByVal e As System.Windows.Forms.KeyPressEventArgs) _
                Handles MyBase.KeyPress
        Dim str, str2 As String, int, int2, KA As Integer
        Dim fn As New Font("Comic Sans MS", 11)
        Dim fs As New Font("Comic Sans MS", 5)
        KA = Asc(e.KeyChar)
        Select Case KA
            Case 48 To 57, 65 To 89, 96 To 121, 8, 13, 43, 175
            Case Else
                KA = 0
        End Select
        str = Me.Text
        For int = 0 To 9
            int2 = str.IndexOf(CStr(int))
            Do While int2 <> -1

                Try
                    str2 = str.Substring(int2 - 1, 1)
                Catch

                End Try

                Select Case str2
                    Case str2 = " "
                    Case str2 = "="
                    Case str2 = "+"
                    Case Asc(str2) = 65 To 89, 96 To 121
                        'вот сюда я пытался вставить операторы "понижения" шрифта до подстрочного
                        rtxtC.Font = fs
                        rtxtC.SelectionCharOffset = -5
                        'почему то не работает
                    Case CInt(str2) = 0 To 9
                        'если CInt(str2) подстрочный, то надо "понизить" и следующую цифру
                        'вот сюда надо вставить операторы "понижения" шрифта до подстрочного
                End Select

            Loop
        Next
    End Sub


Отличается тем, что "вынес" оператор Select Case за рамки Try...Catch...EndTry (после просмотра в режиме прерывания).
Все равно не работает.
Помогите, пожалуйста! Ведь не может быть, что никто не знает.
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 120

    TopList