Microsoft Access 掲示板

テキストボックスにうっすら表示させておく

13 コメント
views
4 フォロー

帳票の狭い領域の中で、テキストボックスを2行にした際のユーザーのフィールドタイトル認識に悩んでいます。
どこかで見たことがあるのですが、入力前にテキストボックスにタイトル(名前のフィールドであれば「名前」など)をうっすら表示させ、1文字でも入力したら消える仕組みを作ることはできますでしょうか。

シソンヌ
作成: 2020/10/07 (水) 10:09:15
通報 ...
1

1文字でも入力したらというのは難しいですが、薄く表示させておいてフォーカスが来たら消えるという仕様なら下記の方法で可能です。

「名前」テキストボックスの上に重なるようにテキストボックスを配置して下記のように設定します。

プロパティ設定値
コントロールソース=IIf([名前]<>"","","名前")
背景スタイル透明
境界線スタイル透明
前景色灰色
タブストップいいえ
名前ph名前

フォーカス取得時のイベントプロシージャを下記のように記述します。

Private Sub ph名前_Enter()
    Me.名前.SetFocus
End Sub

以上です。

2
hiroton 2020/10/07 (水) 17:19:32 31f4f@f966d >> 1

フォーカスのあるテキストボックスは背景スタイルの「透明」が無効になるので「名前」テキストボックスを最前面へ移動して背景スタイルを「透明」にしてあげればVBAはいらないかなと


1文字でも入力したら~を実現しようと思ったらEnterでNullなら幅0、文字入力orExitで幅を戻すとかする感じですかねぇ。労力に見合った感じはしないですね

3

名前」テキストボックスを最前面へ移動して背景スタイルを「透明」

なるほど、それがシンプルでいいですね。


1文字でも入力したら~

単票フォームならいいですが、帳票フォームだとカレント行以外にも影響を与えるので、それを考慮すると難しい。条件付き書式で文字色を白(背景色と同じ)にすることになるかな。下記の応用で。

カレント行の背景色の変更 - hatena chips

4
シソンヌ 2020/10/09 (金) 07:53:51 0029a@1c915

ありがとうございました。早速今日、実装予定です。
ところでこういったコントロールソースやクエリデザインで使う式なども
汎用関数を作って対応することはできますでしょうか?
もし使えるという場合、逆に使えない場所があれば教えてください。

5
シソンヌ 2020/10/09 (金) 08:35:39 0029a@1c915 >> 4

ちなみに下記のような形ではうまく行きませんでした
初心者で恐れ入ります。

Public Function Titleph(phTitle)

    If Me.phTitle <> "" Then
    phTitle
    End If
    
End Function
6
hatena 2020/10/09 (金) 09:30:20 修正

汎用関数は、

Public Function Titleph(txtbox As control, placeHolder As String)

    If txtbox.Value <> "" Then
       Titleph = txtbox.Value
    Else
       Titleph = placeHolder 
    End If
    
End Function

テキストボックスのコントロールソースに、下記のように設定することになります。

=Titleph([名前],"名前")

7
シソンヌ 2020/10/09 (金) 09:57:48 0029a@1c915 >> 6

早速ありがとうございました。
上記VBAをコピーして、コントロールソースは「名前」の部分だけ変えて実装してみましたが
「#Name?」と表示されます。
色々試してみたこととしては、「Mtxtboxをtxtboxに変える」(宣言での変数と文中での変数が異なっていていいのかわからず??)「標準モジュールにおいたり、該当のフォームのモジュールにおいたり」です。
ちなみに、コントロールソースは自動で下記のように[]がついておりました。
==Titlepath

何か勘違いしておりますでしょうか?

8
シソンヌ 2020/10/09 (金) 09:58:49 0029a@1c915 >> 7

失礼しました。コントロールソースの自動変換後は下記になります。

=[=Titlepath]([名前],"名前")
9
シソンヌ 2020/10/09 (金) 10:12:16 0029a@1c915 >> 7

コントロールソースが間違って「Titlepath」になっていたことに気づきました…「Titleph」に変更したところ、エラーが「#Type!」になりました。度々すみません。

11

=[=Titlepath]([名前],"名前")

Titlepath は Titleph に修正済みとして、その前の全角の を半角の = に変更してください。
(前の私の回答も全角になってましたので修正しておきました。)

=Titleph([名前],"名前")

10

色々試してみたこととしては、「Mtxtboxをtxtboxに変える」

タイプミスでした。txtboxが正しいです。回答も修正ておきます。

テキストボックスのコントロールソースの設定は下記です。
[名前]の[]内はテキストボックスの名前、"名前"の部分はうっすらと表示させたいテキストです。

=Titleph([名前],"名前")
12
シソンヌ 2020/10/09 (金) 10:59:31 0029a@1c915 >> 10

うまくいきました。(ちなみにもう1か所Mtxtboxのままになっている部分があるようです)
大変勉強になりました。応用して、他でも色々作れそうです。ありがとうございました。

13

ちなみにもう1か所Mtxtboxのままになっている部分があるようです

あっ(汗)、修正しておきました。