DOBON.NET DOBON.NETプログラミング掲示板過去ログ

TextBox(ImeMode=Hiragana)のLeaveイベントにて入力済みの漢字が消失

環境/言語:[OS : Windows 7 / 言語 : Visual Basic .NET / .NET Framework : 3.5]
分類:[.NET]

【解決したい問題】

ImeMode=Hiraganaに設定したTextBox1からフォーカスが離れると
TextBox1にて入力済みのTextの文字のうち
左端から1文字目ないし2文字目のみ残り
そこより右側が消えてしまいます。
これが消えないように修正したいです。

例)
TextBox1にて カナ入力で オオタと入力し
スペースキーで 大田 と確定後
キーボードの↓キー、Enterキー、
TextBox2でのマウスダウンのいずれかで
TextBox2へフォーカスが移動した場合
TextBox1.Textの 田 が消えて 大 のみ残ってしまいます。
プログラムではkeyDowmイベントで↓キー、Enterキー
を処理しています。

出荷先のlevonoにて発生
1000件以上のユーザーで使用中のアプリですが
この不具合は始めて発生しました。

ソースコード部分------------------------------------------------
当該フォーム内イベント(KeyPreview=True)
Private Sub Form1_KeyDown
(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
Handles MyBase.KeyDown
...
Select Case e.KeyCode
Case Keys.Up
e.Handled = True
xGotoPrevControl(Me)'一つ前のコントロールへ
Case Keys.Down
e.Handled = True
xGotoNextControl(Me)'次のコントロールへ
Case ...
...
Case KeysEnter
e.Handled = True
xGotoNextControl(Me) '次のコントロールへ
End Select
End Sub
'TextBox1からフォーカスが移動した場合----------------
Private Sub TextBox1_Leave
(ByVal sender As Object, ByVal e As System.EventArgs)
Handles TextBox1.Leave
setBackColor(TextBox1, False)'背景色を元に戻す
modCommon.hanToZen(TextBox1)'半角→全角
End Sub
'TextBox2にフォーカスが移動した場合------------------
Private Sub TextBox2_Enter
(ByVal sender As Object, ByVal e As System.EventArgs)
Handles TextBox2.Enter
setBackColor(TextBox2, True)'背景色をセット
End Sub
'別モジュールにて-----------------------------------------------
'一つ前のコントロールへ移動する
Public Function xGotoPrevControl
(ByRef i_f As Form, Optional ByVal i_cntrl As Control = Nothing)
As Boolean
Dim ret As Boolean
If IsNothing(i_cntrl) Then
ret = i_f.SelectNextControl(i_f.ActiveControl, False, True, True, True)
Else
ret = i_f.SelectNextControl(i_cntrl, False, True, True, True)
End If
Return ret
End Function
'次のコントロールへ進む-----------------------------------------
Public Function xGotoNextControl
(ByRef i_f As Form, Optional ByVal i_cntrl As Control = Nothing)
As Boolean
Dim ret As Boolean
If IsNothing(i_cntrl) Then
ret = i_f.SelectNextControl(i_f.ActiveControl, True, True, True, True)
Else
ret = i_f.SelectNextControl(i_cntrl, True, True, True, True)
End If
Return ret
End Function
'コントロールの背景色をセットする---------------
Public Sub setBackColor
(ByRef i_ctrl As Control, ByVal i_bln As Boolean _
, Optional ByVal i_blnCyan以外 As Boolean = False)
Dim newColor As Color
If TypeOf i_ctrl Is TextBox Then
newColor = IIf(i_bln, Color.Cyan, SystemColors.Window)
ElseIf ... Then
newColor = ...
ElseIf ... Then
newColor = ...
Else
MsgBox(i_ctrl.Name)
Stop
End If
i_ctrl.BackColor = newColor
End Sub
'指定されたTextBoxの.Textを全角に変換する-----------
Public Sub hanToZen(ByRef i_txt As TextBox)
i_txt.Text = StrConv(i_txt.Text, VbStrConv.Wide)
End Sub
---------------------------------------------------------------
StrConv()の3つ目の引数(デフォルト)localeID=0
が原因かとも思いましたが、先方に確認したらシステムロケールは
日本語(日本)でした。

以上です。
よろしくお願いします。

【追加事項】

ユーザーの許可を得て代用PCを使用していただき
当該PCを送付してもらって、デバグコードを埋め込む等して
原因解明・不具合修正しようと思いっています。
■No28715に返信(h.hayashiさんの記事)

> スペースキーで 大田 と確定後
スペースキーだけでは通常確定出来ないと思いますがそういう設定ですか?

> Case ...
> ...
ここら辺は大丈夫ですか?


IMEとの相性もあるかもしれません。
■No28716に返信(shuさんの記事)
> ■No28715に返信(h.hayashiさんの記事)
>
>>スペースキーで 大田 と確定後
> スペースキーだけでは通常確定出来ないと思いますがそういう設定ですか?
>
>>Case ...
>>...
> ここら辺は大丈夫ですか?
>
>
> IMEとの相性もあるかもしれません。

すみません。訂正します。

スペースキーで 大田 と確定後
→ スペースキー・Enter で 大田 と確定後

Form1_KeyDownでの
Case ...
Case ...
の部分はもう少し複雑で、
フォーム内のどのコントロールでのKeyDownかにも依存しています。
■No28717に返信(h.hayashiさんの記事)
> ■No28716に返信(shuさんの記事)
>>■No28715に返信(h.hayashiさんの記事)
経過報告します。
ユーザーのPCが未到着で
到着待ち状態です。
■No28725に返信(h.hayashiさんの記事)
> ■No28717に返信(h.hayashiさんの記事)
>>■No28716に返信(shuさんの記事)
> >>■No28715に返信(h.hayashiさんの記事)

経過報告します。
ユーザーのPCが到着しました。

PCを起動し、
2ユーザーアカウントのうちユーザーに指定されたユーザー(Administrator)で立ち上げソフトを起動したら、
「発行元が不明のプログラムが、開始する許可を求めています。」と表示されたので、
[はい(Y)]で先へ進んだら同じ不具合が発生しました。

他のユーザーアカウント(Administrator)を作成しそれで立ち上げ、そのソフトを使用したところ正常に動作しました。

インストールとユーザーアカウントの関係にどこか不整合があったのかもしれません。
不具合が発生した元のユーザーアカウントにてソフトのインストール方法を変えたら不具合は消えました。

誠に勝手ながら本件にこれ以上の時間は割けそうにないので
来週月曜夕方(7/17)に解決済みとさせていただく予定です。
■No28742に返信(h.hayashiさんの記事)
> ■No28725に返信(h.hayashiさんの記事)
>>■No28717に返信(h.hayashiさんの記事)
> >>■No28716に返信(shuさんの記事)
>>>>■No28715に返信(h.hayashiさんの記事)

shuさんありがとうございました。
解決済みとさせていただきます。
解決済み!
「書き込みのルールについて」にありますように、解決していない場合は、解決済みにしないでください。よろしくお願いいたします。

書き込みのルールについて
http://dobon.net/vb/bbs/index.html

DOBON.NET | プログラミング道 | プログラミング掲示板