|
■No50049 (よねKEN さん) に返信 よねKENさん、早速の回答ありがとうございます。 すみません、VB6とVB.netで情報がごちゃごちゃになっていました。
Public Class Form1 'form1にて、strKanaをString文字列として宣言しています。 Dim hIMC As IntPtr Dim strKana As String
'各ボタンの動作は、下記のようになります。 'strKana は、毎回1文字のみに上書きされます。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click strKana = Button1.text '"あ" TextBox1.Focus() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click strKana = Button2.text '"い" TextBox1.Focus() End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click strKana = Button3.text '"う" TextBox1.Focus() End Sub
textbox1のEnterイベント内で dim ret as Boolean ret = ImmSetCompositionString(hIMC, eSCS.SCS_SETSTR, strKana, length, Nothing, 0) 'strKanaの文字は、必ず1文字で、Lengthは必ず2です。
button1を3回押下すると、"あああ"と表示されますが、 button1,button2,button3と押下していくと、最終的に"う"が表示されます。 button1,button2,button3と押下した状態で、再度button1,button2,button3と押下すると"うあいう"と表示されます。 一度、ImmSetCompositionStringを通った文字は、保持されるような動きをしています。 textbox1から、フォーカスが一度外れて、再度フォーカスが戻る処理と,ImmSetCompositionStringに 関連がありそうにも思います。
この情報で、いかがでしょうか? よろしくお願いいたします。
>>@Button1、Button2、Button3の順番でクリックすると、テキストボックスに表示される文字は >> button3の"う"の文字だけが変換前文字として表示されます。 > > 「strKana= Button2.caption' "い"form1のローカルString変数にボタンのキャプション文字をセット」 > とstrKanaという変数に1文字しか入れていないので当然の結果のように思えますが・・・ > > >> Aもう一度、Button1、Button2、Button3の順番でクリックすると、 >> "うあいう"と表示されます。 > > 提示されている情報からではそうはならないように読めます。 > 変数strKanaの説明もないですし、どこで宣言されていて、他にどこで変更されているか/いないかわからないのですが、 > この変数strKanaの変化をデバッグして追えば、問題点を明らかにできるのではないでしょうか。 > > -- > 後、問題点とはあまり関係ないと思いますが、いくつか気になるところを確認しておきます。 > >> 2.form1に、コマンドボタンを数個配置(キャプションには、"あ","い","う"等を記載して見た目ソフトキーになるように) >> Button1.caption = "あ" >> Button2.caption = "い" >> Button3.caption = "う" > > コマンドボタンですか? > Microsoft.VisualBasic.Compatibility.VB6 名前空間 > http://msdn.microsoft.com/ja-jp/library/ms634909(v=VS.100).aspx > にはそれらしいクラスが見当たらないのですが、System.Windows.Forms.Buttonクラスではないということでよろしいですか? > このButtonクラスならCaptionではなくTextプロパティのはずなので・・・ > >> 5.textbox1のEnterもしくはGotfocusイベントにて > > VB6のGotFocusイベントに対応するのは、.NETではEnterイベントです。 > .NETのGotfocusイベントは低レベルイベントなので基本的には使用しません。 > >> Dim length As Integer >> Dim ret As Long >> length = Encoding.Unicode.GetByteCount(strKana) >> '文字入力をする >> ret = ImmSetCompositionString(hIMC, eSCS.SCS_SETSTR, strKana, length, Nothing, 0) > > retがLong型で宣言されていますが、APIの定義に合わせてBooleanですよね。 > >> もちろん、textbox1にキーボードから直接入力すれば、正しくAの動作をします。 > > 提示のコードの中にはtextbox1.Textプロパティに関わるようなコードは含まれていませんので、 > この説明が何を意味するのかわかりません。 >
|