入力した全角文字列が逆になってしまいます。

[戻る]
tk 2002/10/21(月) 17:47:46
エディットボックスの内容変更時に文字列の加工処理を行うと
入力カーソルが先頭に戻るようで、文字列が逆になる場合があります。
例:「さる」→「るさ」
この場合の対処法、調査方法等を教えてください。お願いします。

wood 2002/10/22(火) 09:18:44
>文字列の加工処理を行うと
どんなことしているのですか

参考に環境はどうなってるの
MFCは?

PATIO 2002/10/22(火) 09:53:19
追加発言の所にある

発言される前に「使用上の注意」を必ずお読み下さい。

を見ていますか?

提供できる情報は全て提示しましょう。
読んでいる人は貴方しか知らない状況を知る術はありません。
ましてや、質問して回答を得ようと言うのに
回答してくれる人に自分の状況を今の内容だけで把握する努力を強いるのは
マナーに反すると思いますよ。
質問する側が自分の状況をわかってもらおうと努力する姿勢を見せないと
回答する側は引いてしまいます。

[E-Mail] 2002/10/22(火) 10:44:34
> エディットボックスの内容変更時に文字列の加工処理を行うと
> 入力カーソルが先頭に戻るようで、文字列が逆になる場合があります。

それは「文字列が逆」になるように「文字列の加工処理」行っているのでは?

> この場合の対処法、調査方法等を教えてください。お願いします。

対処法:文字列が逆にならないようにする。
調査方法:デバッグ

※決して茶化しているわけではありません。デバッグしてるかも疑問に思ったんで。

tk 2002/10/23(水) 21:55:08
[[解決]]
情報が足りなかったようですね。申し訳ないです。
OnEditchangeCombo1(コンボに入力で内容変化)にて、以下のように入力文字列数を制限し、
制限数以上の文字列を入力すると先頭からの入力となり、文字列逆転が発生です。
結構、簡単に発生するケースだと思ったので、情報を省略してしまいました。すみません。

    CComboBox* lpEdt1 = (CComboBox*)GetDlgItem(IDC_COMBO1);
    dw = lpEdt1->GetEditSel();
    lpEdt1->GetWindowText(cRetStr);
    if (cRetStr != seng.Left(4)){
        lpEdt1->SetWindowText(seng.Left(4));
        dw -= seng.GetLength() - 4;
    }    
    lpEdt1->SetEditSel(dw,dw);

ちなみに以下の@ABの処理追加によるカーソル操作にて、解決できました。
    CComboBox* lpEdt1 = (CComboBox*)GetDlgItem(IDC_COMBO1);
//@    dw = lpEdt1->GetEditSel();
    lpEdt1->GetWindowText(cRetStr);
    if (cRetStr != seng.Left(4)){
        lpEdt1->SetWindowText(seng.Left(4));
//A        dw -= seng.GetLength() - 4;
    }    
//B    lpEdt1->SetEditSel(dw,dw);

いろいろと助言、どうもありがとうございました。

古いスレッドには追加発言できません。