テキストボックスのマスクを入力した文字数以上で表示させたい への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 (削除されました)  ()
投稿日時
2010/3/12 05:19:25
(削除されました)
投稿者 ヴァン  (社会人)
投稿日時
2010/3/12 03:32:01
>うまくいきませんでした。
何が上手くいかなかったのか。
エラーが出たのか。予定した動きと違ったのか。
それ位は書きましょうよ。
今回の場合はpasswordcharを使うよりTextBoxを拡張したクラスを作ったほうが簡単に出来そうですね。
何が上手くいかなかったのか。
エラーが出たのか。予定した動きと違ったのか。
それ位は書きましょうよ。
今回の場合は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
と書いてみてください。エラーと判定してくれます。
だからこそ、アドバイスが色々出た訳です。
アドバイスを参考にしない手で上手くいかないと言われても、
こちらからいう事は何もありません。
[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.Object, ByVal 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メモリの管理、情報の複製防止など)が必要です。
ひとつの案としては、USBメモリ等に、パスワードが記録されているファイルを入れ、起動時にそのファイルの内容を読み込むといった方法があります。すなわち、USBメモリを起動Keyとする方法ですね。
高価な商業ソフトでは、この方法を採用しているものがあります。ただ、実現するには、かなりの手間(USBメモリの管理、情報の複製防止など)が必要です。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2010/3/5 05:17:57
入力した文字数が見えてしまうのが問題というのであれば、
そもそも TextBox を使う必要も、*を表示する必要もなく、
単にキー押下だけを拾えば良いと思います。
> 入力した文字数以上の*で表示させたいのですが、
その仕様だと、
1文字目を打ったときに、「*****」
2文字目を打ったときに、「*******」
3文字目を打ったときに、「****」
のように表示される可能性もあるわけですが、それで良いのでしょうか?
また、誤刻の訂正で BackSpace を押された場合、どうなって欲しいのでしょうか。
マウス操作でドラッグされた場合、どのようになって欲しいのでしょうか。
そもそも 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.Object, ByVal 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を*にして設定しています。
この問題はプロパティから設定できるのでしょうか?
コード上で解決するしかないのでしょうか?
よろしくお願いします。