проверка текстового поля в vb6 (отключить вставку) - PullRequest
0 голосов
/ 01 октября 2010

проверка текстового поля в vb 6.0. Я пробовал

Private Sub Text1_KeyPress(KeyAscii As Integer)    
    If Not (KeyAscii = vbKeyBack Or KeyAscii = vbKeyDelete Or KeyAscii = vbKeySpace Or (KeyAscii >= Asc("1")     And KeyAscii <= Asc("9"))) Then
    KeyAscii = 0
End If

, но теперь я хочу, чтобы опция вставки отключалась, когда я щелкаю правой кнопкой мыши на текстовом поле

Ответы [ 3 ]

2 голосов
/ 01 октября 2010

Если вы хотите запретить использование в текстовом поле элементов меню, вызываемых правой кнопкой мыши, вы можете создать собственное контекстное меню.

Затем, используя вызовы API, необходимо отсоединить меню по умолчанию от текстового поля и подключить пользовательское меню. (Мне не известны другие API, которые позволяют отключать / скрывать элементы только в существующем контекстном меню)

Недостатком является то, что любой элемент меню, который вы хотите сохранить, например, копировать или удалять, необходимо написать для себя.

Вы можете найти очень хорошее объяснение того, как это сделать, здесь Отключить контекстное меню правой кнопкой мыши в текстовом поле и здесь Странная реакция на всплывающее меню

Что дальше, .. что будет, если пользователь использует CTRL + V для вставки? Или что, если пользователь вставил сопоставление с другими комбинациями клавиш, кроме CTRL + V?

Вместо этого проверить данные?

В итоге вы можете написать много кода, пытаясь предотвратить ввод данных. Почему бы не сохранить эту работу и позволить пользователю ввести то, что ему нравится, и использовать событие validate для проверки данных?

Я написал пример на другом сайте об использовании события проверки текстового поля здесь: Проверка значения является числовым . У этой ссылки также есть демонстрационный проект vb6, который я собрал вместе в посте.

Тип проверки не имеет значения, я полагаю, он просто демонстрирует, что использование события validate позволяет вам сосредоточиться на проверке данных, а не пытаться закодировать каждый возможный способ предотвращения ввода данных в первое место.

Событие Validate запускается перед потерянным фокусом и перед getfocus следующего элемента управления. Только если событие validate не , переданное , отменит действие, будет выполнено событие lostfocus и любое последующее событие. Событие Validate предназначено для использования для проверки значения элемента управления перед выполнением любого другого события.

1 голос
/ 19 декабря 2011
Private Sub Text1_Change()
    If Text1.Tag <> Text1.Text Then
        Text1.Text = Text1.Tag
        Text1.SelStart = Len(Text1.Text)
    End If
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
    Text1.Tag = Text1.Text & Chr(KeyAscii)
End Sub
0 голосов
/ 01 октября 2010

это очень похоже:

Private Sub Text1_Change()

Dim i As Long, sTemp As String

    For i = 1 To Len(Text1)
        If InStr(1, "0123456789", Mid$(Text1, i, 1)) > 0 Then sTemp = sTemp & Mid$(Text1, i, 1)
    Next

    Text1 = sTemp
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...