- - PR -
dataGridのセルにフリガナを自動入力できます
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-10-17 18:07
dataGridのセルに入力した名前のフリガナを右隣のセルに自動的に入力させたいのですが,思い通りのふりがなにならなくて困っています。
@山田⇒ヤマダヤマダ 小山田⇒オヤマダオヤマダオヤマダ 畠⇒ハタ というように表示されてしまいます。 A<山田⇒ヤマダヤマダ>となっているところで,[BackSpaceキー] を,押したときには⇒オヤマダオヤマダオヤマダオヤマダオヤマダオヤマダ となります。 対策として @には,lPBufの内容をどこかの時点で開放するのかなと思ってますが どのようにしたらよいのかわかりません。 Aには,[BackSpaceキー]の押し下げに対処するコードを書けばいいと思ってますが これはなんとか対処できそうですが,これで大丈夫かなと思ってます。 どなたか,対処の方法を教えてください。お願いします。 (textBoxのTextChangeイベントでも同じ現象になります)
[ メッセージ編集済み 編集者: ZEN73 編集日時 2004-10-22 10:05 ] [ メッセージ編集済み 編集者: ZEN73 編集日時 2004-10-22 10:24 ] | ||||||||||||
|
投稿日時: 2004-10-17 21:02
諸農です。
KeyPressイベントが変換文字単位で発生しているからではないでしょうか?
「ヤマダ」なのに「オヤマダ」になるんですか? これは変ですね。 バッファのクリアが変なのかな。
WM_IME_COMPOSITIONのメッセージを受け取ることで変換確定を知ることが 出来ますので、DataGridTextBoxの拡張版をDataGridにセットしてみては いかがでしょうか。 拡張版TextBoxはこちらが参考になると思います。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7712&forum=7 #丸数字を変えました。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||||||
|
投稿日時: 2004-10-18 05:23
善浪です。
諸農さんの早速のアドバイス,ありがとうございます。 (以前にも,いろいろと教えていただき,感謝しています) 引用:------------------------------------------------------- 「ヤマダ」なのに「オヤマダ」になるんですか? これは変ですね。 バッファのクリアが変なのかな。 ------------------------------------------------------------- これは,「ヤマダヤマダヤマダヤマダ」のまちがいでした。 引用:------------------------------------------------------- KeyPressイベントが変換文字単位で発生しているからではないでしょうか? WM_IME_COMPOSITIONのメッセージを受け取ることで変換確定を知ることが 出来ますので、DataGridTextBoxの拡張版をDataGridにセットしてみては いかがでしょうか。 拡張版TextBoxはこちらが参考になると思います。 Public class TextBoxEx :TextBox ------------------------------------------------------------- 拡張版dataGridのクラスにするには, ア: Public class dataGridEx : dataGrid イ: Public class dataGridTextBoxEx : dataGridTextBox どうするのかぁ? ともかくも早速試してみます。 | ||||||||||||
|
投稿日時: 2004-10-18 19:48
善浪です。
諸能さんの引用------------------------------------------- WM_IME_COMPOSITIONのメッセージを受け取ることで変換確定を知ることが 出来ますので、DataGridTextBoxの拡張版をDataGridにセットしてみては いかがでしょうか。 拡張版TextBoxはこちらが参考になると思います。 Public class TextBoxEx :TextBox { ・・・・・・・・・・・・・・・ } private void Form1_load { TextBoxEx tb = new TextBoxEx(); tb.CompositionEvent += new TextBoxEx.CompositionEventHandler(this.CompoEvent); this.Controls.Add(tb); } ------------------------------------------------------------- いろいろと,試しては見たのですが,お手上げです。 何がわからないかというと,DataGridの --------------------- |氏名|フリガナ|番号| --------------------- | | | | --↑----------------- ここでイベントを発生させる「イベントハンドラの設定」 の方法がわからないのです。 上の例では,新たに配置するTextBoxのイベントになっていますので…。 どなたか,お教え願います。 [/quote] | ||||||||||||
|
投稿日時: 2004-10-19 08:33
おはようございます。 VBで申し訳ないですが、僕の場合、 Dim oleDa As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter Dim dtSet As DataSet Dim dtTable As DataTable = New DataTable 〜 データ取得 〜 oleDa.Fill(dtSet, "AAA") dtTable = dtSet.Tables("AAA") でDataTable設定後に 'DataTableに検証イベントを追加 AddHandler dtTable.ColumnChanging, AddressOf Sub_ColumnChanging と、イベントを追加しています。(数種類のイベントがあるようです。) 実際の処理は Private Sub Sub_ColumnChanging(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs) Select Case e.Column.ColumnName Case "(列名A)" If CType(e.ProposedValue, Integer) > 0 Then e.Row.Item("列名B") = DBNull.Value End If End Select End Sub この例では各セルの値によって別のセルの内容を書き換える場合、そのセルの値の変化によって新たなイベントが発生してしまう場合があるので、処理の最初に一旦イベントを削除して最後に元に戻す処理が必要になります。 | ||||||||||||
|
投稿日時: 2004-10-19 21:58
善浪です。
自分のしたいことをきちんと説明するべきでした。 諸農さん,とっとさん,申し訳ありません。 コード-------------------------------------------- lpBuf.Length = dwSize; str = lpBuf.ToString(); dataGrid1[iRow,iCol+1] = str; -------------------------------------------------- 上のコードでは,ちゃんとフリガナが表示されます。 善浪⇒ゼンナミ しかし,姓に続けて名前を入力すると,名前だけが 表示されてしまいます。 善浪太郎⇒タロウ 《これを改善したいのです》 それで,次のようなコードを書いて先に書いたような 結果になってしまった,ということなのです。 コード-------------------------------------------- lpBuf.Length = dwSize; str = lpBuf.ToString(); dataGrid1[iRow,iCol+1]=Furigana + str; Furigana = dataGrid1[iRow,iCol+1].ToString(); ------------------------------------------------- DataGridのイベントは,いろいろ調べているのですが, KyePressイベントがこの場合に使える唯一のイベント と思い込んでしまっています。 アドバイスお待ちしています。 [ メッセージ編集済み 編集者: ZEN73 編集日時 2004-10-19 22:22 ] | ||||||||||||
|
投稿日時: 2004-10-19 22:43
こんばんわ。
ふと、自分がVB6.0でInputManでやってた頃を思い出してみましたが・・。 逆ではダメですか? ふりがなを先に入力するとか・・ | ||||||||||||
|
投稿日時: 2004-10-22 10:00
善浪です。
KeyPressイベントに変えて,KeyDownイベントにしてみたら思い通りにフリガナを表示できるようになりました。Furiganaを配列にして氏名の削除に対応するなど,改良すべき点が多々ありますが,これで一応は使えるんじゃないかと思ってます。 改良についての情報をお待ちしています。
|