Пустой предварительно заполненный текстовый блок только для MouseDown / MouseUp FirstTime - PullRequest
0 голосов
/ 25 марта 2019

Я новичок в word-vba (просто чтобы вы знали, что мой вопрос может быть действительно глупым).

Я хочу очистить текстовое поле только при первом щелчке по текстовому полю.

Я пробовал For ... Next, но я не смог правильно его настроить

Private Sub SWName_Field_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
SWName_Field.Text = ""
End Sub

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

Спасибо за поддержку

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Вы можете использовать локальную переменную Static, чтобы «запомнить», был ли обработчик хотя бы один раз или нет:

Private Sub SWName_Field_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Static executed As Boolean
    If Not executed Then
        SWName_Field.Text = ""
        executed = True
    End If
End Sub

Состояние локального Static привязано к вашему экземпляру UserForm - значение будет «запомнено», пока экземпляр формы жив.

Это означает, что если вы показываете экземпляр формы по умолчанию , состояние не обязательно будет сброшено. Вам нужно будет получать новое состояние формы по умолчанию каждый раз, когда форма показывается, а не только в первый раз - для этого вы New заполняете форму:

With New UserForm1
    .Show
End With

Если вы просто выполните UserForm1.Show, тогда вы не будете контролировать, когда будет создан экземпляр формы, - это сделает VBA.

Вы также захотите контролировать, когда экземпляр формы будет уничтожен - вы можете сделать это, обработав событие QueryClose формы:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = VbQueryClose.vbFormControlMenu Then
        Cancel = True ' cancel the destruction of the object
        Me.Hide ' hide the instance instead
    End If
End Sub

При этом объект будет уничтожен, когда выполнение достигнет End With. Без него объект будет уничтожен, если пользователь нажмет кнопку «X», и вы, вероятно, не захотите, чтобы это произошло (особенно если вам нужно получить доступ к состоянию формы после ее закрытия).

0 голосов
/ 25 марта 2019

Нет встроенного идентификатора состояния активности ни в одном элементе управления пользовательской формы. Поэтому вам нужно использовать метаданные, чтобы указать и определить, происходит ли ваш mousedown в первый раз.

Используйте для этого Tag свойство элемента управления.

Подробнее см. Комментарии к коду.

Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

    '/ Use the Tag field to determine and store the state of Text Box.
    If Len(Me.TextBox1.Tag) < 1 Then
        '/ If Mousedown for the very first  time then TextBox's tag is empty.
        '/ Go ahead, clean the textbox.
        '/ And set a text in tag.
        Me.TextBox1.Text = ""
        Me.TextBox1.Tag = "Text Cleared"
    End If

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