SetWindowText()でエディットボックスに表示できない – プログラミング – Home

通知
すべてクリア

SetWindowText()でエディットボックスに表示できない

固定ページ 1 / 2

ike
 ike
(@ike)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

コマンド釦を押したときに
SetWindowText()でエディットボックスに表示させようと
したのですが空白になったまま表示ができません。
どうしたら表示できるでしょうか?
よろしくお願いします。

CEdit m_edit;
void CSANPLE::OnOK()
{
m_edit.SetWindowText(あいうえお);
}

環境
MFC Appwizard(exe)
windows2000
vc++6.0


引用解決済
トピックタグ
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

「SetWindowText」を使う以外の回答です

クラスウィザードを使ってメンバー変数を追加
カテゴリを「値」、タイプを「CString」にし
設定したメンバ変数に
>(あいうえお)
をセットしてあげれば表示できるようになります

つまり 1つのコントロールIDに
2つのタイプ  (CEDIT、CString)
2つのメンバ変数(m_ce_xx、m_xx)
のようなことができます


返信引用
ike
 ike
(@ike)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

CString m_edit1;を追加したんですけど
表示されませんでした。どうしてでしょうか?

CEdit m_edit;
CString m_edit1;

void CSANPLE::OnOK()
{
m_edit1=あいうえお;
}


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

m_edit1=あいうえお;

の後に、

UpdateData(FALSE);

が必要かと思われます。
(これって、DDXを使用してるんですよね?)


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

じたばたする前に、まずボタンが押されたとき確かにそこに飛んできているかを
確認するのが先決かと。通常 SetWindowTextできないってのは考えにくいのです。


返信引用
ike
 ike
(@ike)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

AfxMessageBox(表示しました);をいれてやると
AfxMessageBox(表示しました);を実行したときに表示することができました。
しかしUpdateData(FALSE);の方は表示できませんでした。

CEdit m_edit;
CString m_edit1;

表示できた↓
void CSANPLE::OnOK()
{
m_edit1=あいうえお;
  AfxMessageBox(表示しました);
}

表示できない↓
void CSANPLE::OnOK()
{
m_edit1=あいうえお;
  UpdateData(FALSE);
}


返信引用
aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
 

メンバ変数がコントロールに関連付けられてないってオチは…さすがにないよなぁ。
関連付けられてないとASSERTで落ちるはずだから…。


返信引用
たく
 たく
(@たく)
ゲスト
結合: 23年前
投稿: 37
 

MFCを使用したダイアログベースのアプリケーションだという前提で
ひとつ確認しておきたいんですが、

CEdit m_edit;
CString m_edit1;

というのは、ClassWizardで作成したものでしょうか?
つまり、AFX_DATA, AFX_DATA_MAPで管理されている
コントロールなのでしょうか?

たとえば、以下のコードは動作しますか?
void CSANPLE::OnButton2()
{
CString strEdit;
m_edit.GetWindowText(strEdit);
  AfxMessageBox(strEdit);
}


返信引用
ike
 ike
(@ike)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

下記コード動作しました。
エディットボックスからデータ取得して
表示しました。

void CSANPLE::OnButton2()
{
CString strEdit;
m_edit.GetWindowText(strEdit);
  AfxMessageBox(strEdit);
}


返信引用
Hogehoge
 Hogehoge
(@Hogehoge)
ゲスト
結合: 21年前
投稿: 2
 

>CEdit m_edit;
>void CSANPLE::OnOK() <- この名前って?
>{
> m_edit.SetWindowText(あいうえお);
 >>> ここになにかないですか? <<< 
>}

もしかして表示確認する暇もなくダイアログを閉じているのでは?
 でも「空白になったまま表示ができません」ってあるしなぁ。

>表示できた↓
>void CSANPLE::OnOK()
>{
> m_edit1=あいうえお;
>  AfxMessageBox(表示しました);
>}

このソースではメッセージボックスは表示されても
エディットボックスの文字列はは更新されないはず。
何が「表示できた」のか???


返信引用
Moge
 Moge
(@Moge)
ゲスト
結合: 21年前
投稿: 1
 

きっとOnCtlColorで
pDC->SetTextColor( RGB( 255, 255, 255 ) );
とでもしてるんでしょ。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

長いプログラムでないのならいっその事全文公開してもらった方が
話が早いかも。
どうも、説明が不十分でまさにそこが悪いという所が表に出てきてないような
感じがします。
話の感じだとテストプログラムレベルの長さみたいだし、その方が良いような。
あまりにも長いというのであれば、仕方ないですけれどね。


返信引用
ike
 ike
(@ike)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

補足します
MFC Appwizard(exe)で作成したダイアログベースのアプリです。
OnOK()はデフォルトで作成される[作成]釦のことです。

ステップ実行で一行一行確認してます。
その結果(2)はAfxMessageBoxを実行したときに”あいうえお”が表示されます。

CString m_edit1;
CEdit m_edit;

(1)ダイアログ上にあるエディットボックスに”あいうえお”が表示がされない↓
void CSANPLE::OnOK()
{
m_edit.SetWindowText(あいうえお);
}

(2)
ダイアログ上にあるエディットボックスに”あいうえお”が表示できた↓
void CSANPLE::OnOK()
{
m_edit1=あいうえお;
  AfxMessageBox(表示しました);
}


返信引用
ike
 ike
(@ike)
ゲスト
結合: 21年前
投稿: 9
Topic starter  

修正します。

OnOK()はデフォルトで作成される[作成]釦のことです。(間違い)

OnOK()はデフォルトで作成される[OK]釦のことです。(正解)


返信引用
Jojy
 Jojy
(@Jojy)
ゲスト
結合: 21年前
投稿: 7
 

m_edit.SetWindowText(あいうえお);
ここからステップインすると、
::SetWindowText(m_hWnd, lpszString);
を呼んでいると思いますが、
チャンとこのSetWindowTextが呼ばれていますか?
また、m_hWndは文字を表示したいエディットのハンドルになっていますか?


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました