初めて質問します。
VB.NET 超初心者です。
タイピングソフトを作成しています。
入力する文字は入力モード「ひらがな」変換モード「無変換」です。
テキストボックスに入力すると入力したキーをLabelに表示したいのです。
chr関数で「あ」〜「ん」など2つキーを使う文字は表示できたのですが、「きゃ」を「kya」など3つのキーを使う文字を入力すると「ゃ」しか表示されません。これを「きゃ」と表示する方法はあるのでしょうか?
どうか、教えて下さい。よろしくお願いします。
>「あ」〜「ん」など2つキーを使う文字は表示できたのですが、
>「きゃ」を「kya」など3つのキーを使う文字を入力すると
入力する(全角)英小文字をキーと呼んでるとして「あ」は「a」で1つキーでは???
1つキーと2つキーの処理ができてるなら3つキーも同じだと思うけど…。
>「ゃ」しか表示されません。これを「きゃ」と表示する方法はあるのでしょうか?
表示しているのは自分なんでしょ?「ゃ」と表示できるなら「き」と「ゃ」を
表示するだけにしか考えられません。chr関数が何故必要なのかも不明。
申し訳ないですがどういった処理を行ってるのか分かるサンプルコードを
提供していただけないでしょうか?。
特攻隊長まるるうさん、ありがとうございます。
また、うまく表現できなくて申し訳ありません。
入力方法はローマ字入力なので、2つキーを使うと書きました。
chr関数は必要ないと書いてあったので、取り除きました。
コードはこんな感じなのですが・・・
よろしくお願いします。
Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
Dim Nyuryoku As String
Dim mozi As String
Nyuryoku = TextBox2.Text
mozi = e.KeyChar
Label2.Text = mozi
>chr関数は必要ないと書いてあったので、取り除きました。
え゛?ボクが書いたの?必要ないかどうかも分からなかったんですが?
さきさんが必要としてるなら理由を説明してくだされば…。
で、これはテキストボックスへの
>入力する文字は入力モード「ひらがな」変換モード「無変換」です。
具体的には「きゃ」だとして、
>「ゃ」しか表示されません。これを「きゃ」と表示する方法はあるのでしょうか?
出力も「きゃ」なわけ?…なんの目的なんだろう???この処理は。…まぁいいか(汗)
Private Sub TextBox2_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
Me.Label2.Text = Me.TextBox2.Text
End Sub
ラベルにどんどん入力した文字が追加されれば良いのかな?
Private Sub TextBox2_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
Me.Label2.Text = Me.Label2.Text & Me.TextBox2.Text
Me.TextBox2.Text = ""
End Sub
何がしたいのか、入力と出力結果の具体的な例を交えて説明して下さい。
ここで終わっても中途半端だから…
結局のところ何がしたかったのかやっぱり分からないけど、
不具合の原因くらいは理解して無いと話は進まない…
という事で考え方を少し解説。
>「きゃ」を「kya」など3つのキーを使う文字を入力すると「ゃ」しか表示されません。
これは何故か?ソースで言うと
> mozi = e.KeyChar
の部分だけど、確かに文字として「ゃ」しか取得できてません。
じゃあ「き」はドコに?
こんな場合は…というかどんな場合でもステップ実行しないと
分からない場合が多いんだけど…自称初心者はここを省く。…それ
じゃ何時まで経っても分からないよ…と思えるのがプログラマ
として成り立つかどうかの分かれ道。ステップ実行しないモノは
プログラマでは無い。…などとまた言い切ってみたりするw。
…上級者でもステップ実行はしてると思うですがにぁ…。
で、イベントなんかはプログラムを止めて1行ずつ見てると
順番が入れ替わってしまい、予定(:program)通りの動きを
しない場合があります。ですからブレークポイントやメッセージ
ボックスで止めたりしません。Debug.WriteLine で出力
したり(デバッグ時)、ログファイルにテキスト出力して確認
(EXE実行時)するわけです。
さて、ヘルプにもイベントの起こる順番とか書いてあったりします。
…が、実際に動かして自分の目で確かめる事を推奨します。一度、
そのコントロールに用意されている全てのイベントに
Debug.WriteLine "イベント名"
だけ書いてどんな時にどんなイベントが何回起こってるのか?
調べてみましょう。勉強になります。
さて、今回の場合、
Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
Debug.WriteLine("KeyPress " & e.KeyChar)
End Sub
でひらがな入力「きゃ(kya)」を実行した結果は
KeyPress き
KeyPress ゃ
行方不明だった「き」が見つかりましたw。
…まぁ、もともと KeyPress で処理しようというのもナンですが…
そこは(面白そうなので)質問者のアイデアを優先するとして、2回
起こってるイベントの内容を保持しておかないと…という結論になります。
ついでに問題点をいくつか…。
・全てのキーを調べていませんが、ボクの環境では[Backspace]キーで
KeyPress イベントが発生してしまいます。出力は…(?)
・拗音の入力…だけを考える…という仕様なのか?という部分で
「ゃ(lya)」とか「ぁ(la)」とかだけを直接入力されたら
どうするのか?
・テキストボックスの入力制限などでよく出てくるけど、コピペ
されたらどうするのか?
…といった具合に決めてもらわないといけない事がたくさんあったり
します。あとはアイデアしだいですねぇ。こーゆー処理を見た事が
ありません。自分で考えるしか無いでしょう。回答は1つではない
…というか結局どんな動きが理想なのか予想できませんが、1つの
例という事で。思い付くまま書いたので改良点、及び別のアプローチ
のレス歓迎。…使い道あるのか?ってツッコミ不可。
[VB.NET]
Private mMojiStack As String = ""
Private mNyuryokuCount As Integer
Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
If Not Char.IsControl(e.KeyChar) Then
Debug.WriteLine("KeyPress " & e.KeyChar)
Me.mMojiStack = Me.mMojiStack & e.KeyChar
Else
Debug.WriteLine("KeyPress Ctrl(" & Asc(e.KeyChar) & ")")
Me.mMojiStack = " "
End If
End Sub
Private Sub TextBox2_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
Debug.WriteLine("TextChanged " & Me.TextBox2.Text)
If Me.mMojiStack.Length <> 0 Then
Me.Label2.Text = Trim(Me.mMojiStack)
Me.mNyuryokuCount = Me.mMojiStack.Length - 1
Me.mMojiStack = ""
Else
If Me.mNyuryokuCount <= 0 Then
Me.Label2.Text = Trim(Me.TextBox2.Text)
Else
Me.mNyuryokuCount = Me.mNyuryokuCount - 1
End If
End If
End Sub
ツイート | ![]() |