tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルテキストボックスの入力プロンプトの非表示
記事No1848
投稿日: 2005/06/23(Thu) 00:49
投稿者ジェクト
[OSのVer]:Windows    [VBのVer]:VB.NET
こんばんは。初めて投稿させていただきます。

早速、質問なのですが、テキストボックスをクリックしたときに入力プロンプト(入力カーソル?)

チカチカしますよね?私の設定ではテキストボックスをread onlyにしているので、入力プロンプトを
非表示にして問題ないというか、意味がないのでどちらかというと消したいのですが何か良い方法は

るのでしょうか?
どなたかご教授の程よろしくお願い致します。

 

[ツリー表示へ]
タイトルRe: テキストボックスの入力プロンプトの非表示
記事No1849
投稿日: 2005/06/23(Thu) 03:16
投稿者花ちゃん
.NET に特化した方法があるのかも知れませんが、
Win32 API 関数の HideCaret を使用すればキャレットは非表示になります

同じような回答をしたと思ったらVB6.0の方でした。
hhttp://www.bcap.co.jp/hanafusa/vbbbs/wforum.cgi?mode=allread&no=3131#3170

[ツリー表示へ]
タイトルRe: テキストボックスの入力プロンプトの非表示
記事No1850
投稿日: 2005/06/23(Thu) 03:34
投稿者魔界の仮面弁士
> 早速、質問なのですが、テキストボックスをクリックしたときに入力プロンプト(入力カーソル?

> が
> チカチカしますよね?私の設定ではテキストボックスをread onlyにしているので、入力プロンプ
トを
> 非表示にして問題ないというか、意味がないのでどちらかというと消したいのですが何か良い方法

> あ
> るのでしょうか?

表示専用にしたいのなら、TextBox ではなく、Label を使うべきかと思いますよ。

例えば、デスクトップ上にあるファイルを右クリックして、そのプロパティを見てください。
それぞれのテキストをクリックすると、入力プロンプト(キャレット)が表示される項目と
表示されない項目がありますが、キャレットが表示される方が TextBox、されない方が Label です。

[ツリー表示へ]
タイトルRe: テキストボックスの入力プロンプトの非表示
記事No1851
投稿日: 2005/06/23(Thu) 08:27
投稿者ジェクト
花ちゃんさん、魔界の仮面弁士さん、早速のご返答ありがとうございます!!

>花ちゃんさん
えっと・・・VBを始めたばかりでまだよく分からないのですが、
>>Win32 API 関数の HideCaret を使用すれば…
というのが良く分かりません(汗)
できたら詳しく教えていただけないでしょうか?お手数おかけして申し訳ありません。

>魔界の仮面弁士さん
すみません、こちらの説明不足でした。
表示専用なんですけど、コピーをするための範囲選択はできるようにしたいんです。
>>それぞれのテキストをクリックすると、入力プロンプト(キャレット)が表示される項目と
>>表示されない項目がありますが、キャレットが表示される方が TextBox、されない方が Label で
す。
例えば「種類」の所はLabelということですよね??
Labelでも選択→コピーを出来るように設定できるのでしょうか?
よろしくお願いいたします。

[ツリー表示へ]
タイトルRe^2: テキストボックスの入力プロンプトの非表示
記事No1852
投稿日: 2005/06/23(Thu) 09:51
投稿者じゃんぬねっと
参照先http://jeanne.wankuma.com/
こんにちは、じゃんぬ です。

> >>Win32 API 関数の HideCaret を使用すれば…
> というのが良く分かりません(汗)
> できたら詳しく教えていただけないでしょうか?お手数おかけして申し訳ありません。

P/Invoke をご存知ない?

Option Strict On

Imports System.Runtime.InteropServuices

Public Class Hoge

    <DllImport("USER32.DLL", Charset:=CharSet.Auto)> _
    Private Shared Function HideCaret( _
        ByVal Handle As IntPtr) As Integer
    End Function

End Class

カレットを消すのではなく、UpdateDefaultButton をオーバーライドして、
ReadOnly なコントロールに遷移した場合は、Before なコントロールに強制的に戻す手もあります。
まあ、私が考えつくだけでも、色々方法はあるわけです。

> 例えば「種類」の所はLabelということですよね??
> Labelでも選択→コピーを出来るように設定できるのでしょうか?
> よろしくお願いいたします。

でしたら、カレットを消す意味はないですね。
ユーザビリティとか、アクセシビリティをもうちょっと考えてみてください。

[ツリー表示へ]
タイトルRe^3: テキストボックスの入力プロンプトの非表示
記事No1853
投稿日: 2005/06/23(Thu) 12:13
投稿者ジェクト
じゃんぬねっとさん、ご指摘ありがとうございます。
>ユーザビリティとか、アクセシビリティをもうちょっと考えてみてください。
確かに、もう一度その面からも考えさせてもらおうと思います。

[ツリー表示へ]
タイトルRe^4: テキストボックスの入力プロンプトの非表示
記事No1854
投稿日: 2005/06/23(Thu) 13:23
投稿者花ちゃん
ユーザビリティ かどうかは、そのソフトを使う人が決める事だと私は思って
いるので、その辺の議論は、別として
(実際、ReadOnly プロパティ やHideCaret 関数があるのだし)

HideCaret 関数 を .NET で試して見たのですが、ちょっと動きが素直でないようなので
注意が必要かと思います。
キャレットが移動すると表示してしまうのでEnter イベントに書かないで
GotFocus イベントに書く必要があるようです。
Enter イベント → GotFocus イベント の順番でイベントが発生しており、Enter イベントに
書くとGotFocus イベントで表示してしまう。

表示する場合は、ShowCaret API 関数を使いますが、HideCaret 関数を使用しなければ
表示するので、フラグでも設定してやればいいかと思います。
(使用方法に合わせてコードを書いて下さい。下記は参考までに)


    Private Declare Function HideCaret Lib "user32.dll" (ByVal hwnd As IntPtr) As Integer
    Private crtHide As Boolean

    Private Sub Button1_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) Handles Button1.Click
        crtHide = True
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) Handles Button2.Click
        crtHide = False
    End Sub

    Private Sub TextBox1_GotFocus(ByVal sender As Object, _
                                  ByVal e As System.EventArgs) Handles TextBox1.GotFocus
        If crtHide Then
            Call HideCaret(TextBox1.Handle)
        End If
    End Sub

'-----------------------------------------------------------------------

>>Win32 API 関数の HideCaret を使用すれば…
>というのが良く分かりません(汗)

こう言った場合、Googleで[HideCaret]をキーワードに検索して見て下さい。
(これは、当サイトのお約束事です。 hhttp://www.bcap.co.jp/hanafusa/hazimeni.htm#keijiban

[ツリー表示へ]
タイトルRe^5: テキストボックスの入力プロンプトの非表示
記事No1855
投稿日: 2005/06/23(Thu) 21:19
投稿者ジェクト
花ちゃんさん、レスありがとうございます。
丁寧なソース大変嬉しいです!!
>こう言った場合、Googleで[HideCaret]をキーワードに検索して見て下さい。
>これは、当サイトのお約束事です。
すみません。マナー違反ですね…。今後気をつけます!!
今回のソースを参考にさせてもらって、プログラムしようと思いますが、しっかり理解しながら
やろうと思うので結果報告には時間がかかるかもしれません…。
出来たら報告しますね!!また、分からないことがあったら質問させてください<(_ _)>

[ツリー表示へ]
タイトルRe^5: テキストボックスの入力プロンプトの非表示
記事No1859
投稿日: 2005/06/27(Mon) 16:16
投稿者ジェクト
みなさんお世話になりました。
APIについても分かり、無事キャレットを消すことができました。
またご縁があったらご指導の程よろしくお願いいたいます。

[ツリー表示へ]