エディットボックスを非表示にする方法について – プログラミング – Home

エディットボックスを非表示にする方法に...
 
通知
すべてクリア

[解決済] エディットボックスを非表示にする方法について


たかおか
 たかおか
(@たかおか)
ゲスト
結合: 20年前
投稿: 1
Topic starter  

初めまして、たかおかと申します。

VCでSDIアプリを作成しております。
メニュのボタンを押すと、ダイアログが順番に表示され各種設定をする仕様です。
(市販アプリのインストール時のように、「次へ」ボタンで設定するイメージです。)

あるダイアログで「1」が選択された場合は、次のダイアログでエディットボックス「A」「B」
を表示させ、「2」が選択された場合はエディット「A」を表示し「B」を非表示にしたいと思っ
ております。

EnableWindow(FALSE)を呼んだところ、ビルドはOKで実行時にエラーになりました。
以下は簡略化したコードです。

CInitDialog cid;
int iRet;

if(param == 2)
{
 cid.GetDlgItem(IDC_EDIT2)->EnableWindow(FALSE);
}

iRet = cid.DoModal();

エディットボックスを非表示(または入力不可能)にする方法をご教示お願い致します。
できれば、コードを書く場所も教えてください。

環境
Windows2000
VisualC++6.0
MFC利用

宜しくお願い致します。


引用未解決
トピックタグ
ku
 ku
(@ku)
ゲスト
結合: 24年前
投稿: 312
 

CInitDialogのOnInitDialog()で
GetDlgItem(IDC_EDIT2)->ShowWindow(SW_HIDE);

GetDlgItem(IDC_EDIT2)->EnableWindow(FALSE);
でいけると思います

ご参考までに
コンポーネトギャラリは使えますか?
Visual C++ Componentsの中にプロパティシートというのがあり
これのWizardが使えるかもしれません


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

DoModalする前にcid.GetDlgItem(IDC_EDIT2)->EnableWindow(FALSE);を呼んでも
エディットコントロールはおろかダイアログボックスすら表示されていないのですから
制御できません。
EnableWindowはウインドウとして表示された以降でないと使用できません。
表示前に状態を変えたいのであれば、EnableWindowではなくて
エディットボックスのウインドウスタイルを変更しないと駄目だと思います。

基本的にダイアログ内のコントロールを制御するのはダイアログに任せた方が
構成としてもすっきりすると思います。
ダイアログにモードを保持するメンバー変数でも作成して外部からはこれを設定するだけ
にし、
ダイアログのOnInitDialogでGetDlgItem(IDC_EDIT2)->EnableWindow(FALSE);する方が
いいのではないかと思います。
CDialog::OnInitDialogが呼び出された後であれば、コントロールの制御も可能です。


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

舌足らずだったので少し追加。

ダイアログのOnInitDialogでメンバー変数を参照してエディットボックスを無効にする
モードであれば、GetDlgItem(IDC_EDIT2)->EnableWindow(FALSE);する方がいいのでは
ないかと思います。


返信引用
たかおか
 たかおか
(@たかおか)
ゲスト
結合: 20年前
投稿: 1
 

ご回答有難う御座いました。

OnInitDialog()を作成し、教えて頂いた二つの関数で非表示にすることができました。

GetDlgItem(IDC_EDIT2)->ShowWindow(SW_HIDE); // エディットそのものを非表示
GetDlgItem(IDC_EDIT2)->EnableWindow(FALSE); // エディットが灰色で入力不可

エディットボックスは数個あるので、ご指摘いただいたように
ダイアログのモードを保持するメンバ変数を作成して柔軟に対応できるようにしたいと思いま
す。

>DoModalする前にcid.GetDlgItem(IDC_EDIT2)->EnableWindow(FALSE);を呼んでも
>エディットコントロールはおろかダイアログボックスすら表示されていないのですから
>制御できません。
>EnableWindowはウインドウとして表示された以降でないと使用できません。

勉強になりました。詳しい解説有難う御座いました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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