テキストボックスのマスクを入力した文字数以上で表示させたい への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 (削除されました)  () 投稿日時 2010/3/12 05:19:25
(削除されました)
投稿者 ヴァン  (社会人) 投稿日時 2010/3/12 03:32:01
>うまくいきませんでした。

何が上手くいかなかったのか。

エラーが出たのか。予定した動きと違ったのか。
それ位は書きましょうよ。

今回の場合はpasswordcharを使うよりTextBoxを拡張したクラスを作ったほうが簡単に出来そうですね。
投稿者 るしぇ  (社会人) 投稿日時 2010/3/12 03:17:34
ヘルプを読むようにしてください。

[TextBox.PasswordChar プロパティ]
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.textbox.passwordchar.aspx
Char 型で設定するように書いてあります。

[文字型 (Char) (Visual Basic)]
http://msdn.microsoft.com/ja-jp/library/7sx7t66b.aspx
>単一の Unicode 文字を表します。

つまり、1文字しか設定できないって事だから、当然の結果ですね。
コードの先頭に
Option Strict On
と書いてみてください。エラーと判定してくれます。
だからこそ、アドバイスが色々出た訳です。
アドバイスを参考にしない手で上手くいかないと言われても、
こちらからいう事は何もありません。
投稿者 のり  (社会人) 投稿日時 2010/3/12 02:40:03
[VB2008]

トピ主です。
長い間、こちらに顔出せず、申し訳ございませんでした。
多くのご意見ありがとうございます。
たしかに、マスクのランダムう表示は、入力した桁数を確認できず、不便だとは思いますが、
ウェブサイトを閲覧していると、マスクの数がランダムで表示されているページを
見かけましたので、チャレンジしてみました。

今現在、ランダムステートメントを用いてコーディングし、
ボタンを押した際に、マスクの文字数をランダムで変えるようにしてみたのですが、
うまくいきませんでした。

    Private Sub Txt1_TextChanged(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles TxtUserID.TextChanged
        Randomize()
        Dim musk As String
        Select Case 1 + CInt(Rnd() * 2) 
            Case 1
                musk = "*"
            Case 2
                musk = "**"
            Case 3
                musk = "***"
            Case Else
                musk = "*"
        End Select
        Txt1.PasswordChar = musk
    End Sub


投稿者 はな  (社会人) 投稿日時 2010/3/7 03:23:48
そんな話はどうでもいいよ
投稿者 流れ者  (社会人) 投稿日時 2010/3/7 02:06:49
入力された一文字が*一文字に変わるのは、入力者が、入力した桁数を確認する意味合いもあると思うので、入力文字以上の*になるのは、少々いただけませんね。

ひとつの案としては、USBメモリ等に、パスワードが記録されているファイルを入れ、起動時にそのファイルの内容を読み込むといった方法があります。すなわち、USBメモリを起動Keyとする方法ですね。
高価な商業ソフトでは、この方法を採用しているものがあります。ただ、実現するには、かなりの手間(USBメモリの管理、情報の複製防止など)が必要です。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/3/5 05:17:57
入力した文字数が見えてしまうのが問題というのであれば、
そもそも TextBox を使う必要も、*を表示する必要もなく、
単にキー押下だけを拾えば良いと思います。


> 入力した文字数以上の*で表示させたいのですが、
その仕様だと、
 1文字目を打ったときに、「*****」
 2文字目を打ったときに、「*******」
 3文字目を打ったときに、「****」
のように表示される可能性もあるわけですが、それで良いのでしょうか?

また、誤刻の訂正で BackSpace を押された場合、どうなって欲しいのでしょうか。
マウス操作でドラッグされた場合、どのようになって欲しいのでしょうか。
投稿者 るしぇ  (社会人) 投稿日時 2010/3/5 04:23:41
自前で Graphics 使って文字描画すればいいのでは?
テキストボックスの内容とは全く関係なく。

・・・まぁ、そんな動作をプログラムすること自体気持ち悪い
ですが。
投稿者 トマト  (小学生) 投稿日時 2010/3/5 03:11:01
そのテキストボックスには適当に「*」を表示させて、何か入力されたらKeyPressでStringに一文字追加するみたいな・・。わかりにくいなぁ
Dim s As New System.Text.StringBuilder
Private Sub TextBox1_KeyPress(ByVal sender As System.ObjectByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    s.Append(e.KeyChar)
    e.Handled = True
End Sub
こんな感じ?
投稿者 あにす  (社会人) 投稿日時 2010/3/5 01:04:29
コード書いても困難な気がします。そもそもその仕様では*を表示する意味が無いと思うのですが…。
投稿者 のり  (社会人) 投稿日時 2010/3/5 00:00:58
  

はじめまして、こんにちは。
いつもは意見させていただいております、初心者です。

ただいまvb2008でログイン画面を作成してます。
パスワードを入力するテキストボックスに文字を入力すると『*』を表示させたいのですが、
入力した文字数分*ではなく、入力した文字数を、入力した文字数以上の*で表示させたいのですが、
どうしたらよいのでしょうか?*の数はランダムであるといいのですが・・・。

今現在、テキストボックスのプロパティからpasswordcharを*にして設定しています。
この問題はプロパティから設定できるのでしょうか?
コード上で解決するしかないのでしょうか?


よろしくお願いします。