VC++でダイアログ(Editボックス)を非表示にする方法

このQ&Aのポイント
  • VC++でEditボックスの値が空の場合に非表示にする方法について教えてください。
  • VBの場合はテキストボックスの値が空の場合にVisibleプロパティをFalseにするだけで簡単に非表示にできますが、VC++ではどの機能を使えば良いのか分からないとのことです。
  • MSDNで調べていたらShow関数を使えば可能かもしれませんが、具体的な使い方が分からないとのことです。
回答を見る
  • ベストアンサー

VC++でダイアログ(Editボックス)を不可視にしたい

 この質問を見てくださって有難う御座います。 私がお聞きしたいのは、Editボックスの値が空の時、そのEditボックスを非表示にする方法です。  VBの場合ならば、 If テキストボックス = "" Then    テキストボックス.Visible = False End If と書くだけの簡単な事なのですが、VC++だと何を使ったら良いのか、なかなか分かりません。 多分探し方が悪いだけだと思いますが、何冊も本で調べてみたのですが、結局分かりませんでした。 MSDNで調べていたらなんとなく『Show』を使えば出来そうなのですが、この関数の使い方自体が分かりませんでした。  どうかご教授頂けないでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • itohh
  • ベストアンサー率45% (210/459)
回答No.1

こんにちは。itohhといいます。 VC++でエディットボックスなどを操作するとき、ちょっとしたコツがあります。 VC++もC++ですから、エディットボックスのCEditクラスも、もちろん、いろいろなクラスを 継承して作られています。 継承しているクラスのパブリックメンバ関数は自分のメンバ関数のごとく使用できるのは ご存じですよね? (CEditクラスの概要が説明されているページで細長い箱で継承クラスを表していますよ。) 今回のエディットボックスのCEditクラスもMSDNライブラリで確認してもらえば判りますが、 CWndクラスを継承しています。このクラスは、ウィンドウを操作するためのクラスです。 この中に表示・非表示するためのメンバ関数がありますから、その関数を使用することにより実現 できます。 使用方法ですが。 (1)クラスウィザードでエディットボックスのメンバ変数をCEditクラスで作ってください。    とりあえず、CEditクラスでm_Edit1という名前のメンバ変数とします。    (1つのエディットボックスに、すでに文字列用のメンバ変数が設定されていても追加で     メンバ変数を設定しても大丈夫ですよ。) (2)非表示にするときは上記のメンバ変数で。    m_Edit1.ShowWindow(SW_HIDE); (3)表示にするときは上記のメンバ変数で。    m_Edit1.ShowWindow(SW_SHOW); 一度、MSDNライブラリを確認してみてください。いろいろな操作ができますよ。

XV250Virgo
質問者

お礼

 こんにちは、XV250Virgoと申します。 分かりやすくご親切な解答どうも有難う御座いました! おかげさまで、無事エディットボックスとスタティックテキストの項目を不可視にする事が出来ました。  なるほど、『ShowWindow』関数で出来るのですか。 MSDNを読んでいると、ウィンドウ単位でないと出来ないものと思っておりました。 その先入観が有った為か、インターネットで調べた時も、『ShowWindow』はウィンドウ消去にしか使っていなかったように思えます。 結局『Show』関数は使わなくて良かったのですね。  色々と有難う御座いました。 これで、書籍、インターネット等で5時間以上探していた苦労が報われました。 本当に有難う御座います。 それでは失礼します。

関連するQ&A

  • access2000 テキストボックスの不可視化

    VBA初心者で何回かお世話になっています コンボボックス名が「場所」、値集合タイプは値リストで集合ソースにはa;bを入力してあり,フォーム上で「b」を選択した時だけ、住所という名前が付いたテキストボックスを不可視化したいのですが記述がわかりません。 私の知識では(IF) (Then) (Visible) (False)は使うのかな?というレベルです。どなたかよろしくお願いします。

  • VC++2005のeditコントロールについて

    仕事でVB6.0とFortran77を使っており、今後のためにVC++2005を独学で勉強し始めたのですが、 練習がてらVBでいうTextBoxを使って簡単な計算をしようと思っているんですがうまくいきません。 目標としては2つのeditコントロールに数値をそれぞれ入力し、その2つの数字を足し算するというもの作ろうと思っています。 今のところ、GetWindowText()ってのを使って文字列(CString)を取得することは出来たのですが、 数字(Intなど)を取得することが出来ず、また文字列を整数などに変換する方法もわからない状態です。 MSDNやネットでキーワード検索しても求める情報が見つからず困っております。 どうすればいいのでしょうか?

  • (ACCESS)条件に応じて、テキストボックスを表示・非表示設定

    (ACCESS)条件に応じて、テキストボックスを表示・非表示設定 フォーム上のテキストボックスAを条件に応じて表示・非表示にさせたいです。 条件は、サブフォームのテキストボックスBに「支払」を言う文字があれば、 テキストボックスAが表示され、なければ非表示にする方法が探しています。 わからないなりに調べて、多分以下の文章になると思いますが、「?」の条件式がうまくいきません Private Sub AA_GotFocus() If  ????? Then Me!テキストボックスA.Visible = False Else Me!テキストボックスA.Visible = True End If End Sub どなたか教えてください。 宜しくお願い致します。

  • VB2008EEのチェックボックスにて、

    VB2008EEのチェックボックスにて、 9個のチェックボックスをオン/オフで9個のテキストボックスに文字を表示/非表示させる場合、 一旦チェックをオンにすると値が入ったままになって、オフにしても表示されてしまうため チェックがオフのものはボタン1クリックで空にしています。 1~9まであるのですが、1~4までは機能しているのですが、5~9が機能しません。 1~4にチェックが入っていると下記は実行されません。 5~9にチェックが入っていても下記が実行されてしまいます。      (実際は各番号)         ↓ If CheckBox5.CheckState = CheckState.Unchecked Then layp5 = "" End If なぜ4までと5からで動作が変わるのでしょうか? -------------------------------------------------------------- Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged layp1 = "1" End Sub '実際は2~8も記述あり Private Sub CheckBox9_CheckedChanged(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged layp9 = "9" End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal eAsSystem.EventArgs) Handles Button1.Click If CheckBox1.CheckState = CheckState.Unchecked Then layp1 = "" End If '実際は2~8も記述あり If CheckBox9.CheckState = CheckState.Unchecked Then layp9 = "" End If If (layp1 = "1") Then TextBox1.Text = "aaaaa" End If If (layp2 = "2") Then TextBox2.Text = "bbbbb" End If If (layp3 = "3") Then TextBox3.Text = "ccccc" End If If (layp4 = "4") Then TextBox4.Text = "ddddd" End If If (layp5 = "5") Then TextBox5.Text = "eeeee" End If If (layp6 = "6") Then TextBox6.Text = "fffff" End If If (layp7 = "7") Then TextBox7.Text = "ggggg" End If If (layp8 = "8") Then TextBox8.Text = "hhhhh" End If If (laypca = "9") Then TextBox9.Text = "iiiii" End If End Sub

  • EXCEL VBA ユーザーフォーム内のテキストボックスを一括処理する方法について

    EXCEL VBAのユーザーフォームについて質問があります。 ユーザーフォームを作り、その中にコンボボックスを1個、テキストボックスを100個設置する。 コンボボックスの値が1のときはテキストボックス1~テキストボックス50までのEnabledをFalseに設定し、 コンボボックスの値が2のときはテキストボックス1~テキストボックス100までのEnabled をFalseに設定する。 このとき、TextBox1.Enabled = False、TextBox2.Enabled = False・・・と一つ一つ書いていくのではなく、 セルを処理するときと同様に、テキストボックスの番号を変数にして処理することは可能でしょうか。 Private Sub ComboBox1_Change()  Dim i As Integer   If ComboBox1.Value = 1 Then   For i = 1 To 50   TextBox(i).Enabled = False   Next i   ElseIf ComboBox1.Value = 2 Then   For i = 1 To 100   TextBox(i).Enabled = False   Next i   End If End Sub というような処理をイメージしているのですが、うまくいきません。どうぞよろしくお願いいたします。

  • リストボックス 何も洗濯されてない場合はNullではなく""?

    VB2008です。 フォームにリストボックスを設置し、何も選択せずに コマンドボタンを押すと下記のコードのとおり動くようにしているのですが Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click If IsNothing(ListBox1.Text) = True Then MessageBox.Show("選択してください(Null)") ElseIf (ListBox1.Text) = "" Then MessageBox.Show("選択してください(空白)") Else MessageBox.Show(ListBox1.Text) End If End Sub 「選択してください(空白)」が返ってきます。 ということは何も選択していないときはNULLではなく""なのでしょうか?

  • access テキストボックスをクリックして 可視=false にするには

    よろしくお願いします。 かるた取り(百人一首)のゲームを作っています。 下の句のテキストボックス(かるた0~かるた99)を画面に配置しました。 上の句を表示して、これに合った下の句のテキストボックスをクリックしたときにこのボックスを画面から消し去るにはどうすればよいのでしょうか Private Sub かるた0_Click() If かるた0 = 中句 Then かるた0.Visible = False カードめくり Else MsgBox ("お手つき") End If End Sub としましたが、以下のようなエラーメッセージです。 「コントロールがフォーカスのときはコントロールを非表示にすることは出来ません」 カーソルを移動すればよいと思うのですが、コーディングで移動する方法を教えてください。

  • エクセルVBAでShapesまたはDrawingObjects

    シート上のフォームなどを表示/非表示するためtest04を書きましたが、「実行時エラー438 オブジェクトはこのプロパティまたはメッソッドをサポートしていません」となります。 しかし、Test05のように同じことをForNextで回せばうまくいきます。 また、Test06のようにShapesをDrawingObjectsに書き換えただけでもうまくいきます。 では、Test04がエラーになるのはなぜでしょうか? Sub test04() With ActiveSheet.Shapes If .Visible = False Then .Visible = True Else .Visible = False End If End With End Sub Sub test05() For Each sp In ActiveSheet.Shapes If sp.Visible = False Then sp.Visible = True Else sp.Visible = False End If Next End Sub Sub test06() With ActiveSheet.DrawingObjects If .Visible = False Then .Visible = True Else .Visible = False End If End With End Sub

  • 効率の良いテキストボックスの検知について

    VB6の初心者です。質問させていただきます。 画面上に5つのテキストボックス(TEXT1、TEXT2、TEXT3、TEXT4、TEXT5)と 1つのコマンドボタン(Cmd_SAVE)があり、 画面上の5つのテキストボックスをすべて記入し、 コマンドボタンを押すと、登録確認のメッセージボックスが表示され、 OKボタンを押すと、サーバへ転送され、 画面上のテキストボックスにひとつでも空欄があると、どのテキストボックスが 空欄であるかを示すメッセージが表示される処理をさせています。 そこで質問なのですが、今、メッセージボックス、登録処理は出来るようになったのですが、 とても処理の効率が悪い、もっと空欄を確認するのにすっきりとしたコードはある、と知り合いに言われました。 おそらく、繰り返し等を用いると思うのですが、メッセージにそれぞれのオブジェクト名を代入するやり方がわかりません。 下記が今のコーディングです。 Private Sub Cmd_SAVE_Click()   If TEXT1.Text = "" Then      MsgBox "TEXT1が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT2.Text = "" Then      MsgBox "TEXT2が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT3.Text = "" Then      MsgBox "TEXT3が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT4.Text = "" Then      MsgBox "TEXT4が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT5.Text = "" Then       MsgBox "TEXT5が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If MsgBox("入力データを登録しますか?", vbOKCancel, "登録確認") = vbCancel Then     Exit Sub   End If   End If ~登録処理~ End Sub どのような書き方がきれいで、効率的なコーディングなのでしょうか? ご教示お願いします!

  • AccessVBAのチェックボックスの使い方

    お世話になります。 フォーム上に、印刷sw(チェックボックス)と印刷範囲(テキストボックス)を定義して、次のようにコーディングしました。 If 印刷SW = False Then 印刷SW.Value = True 印刷範囲 = "全て印刷" Else 印刷SW.Value = False 印刷範囲 = "指定印刷" End If これを実行すると 「指定した式には値がありません」 となり、 また 先頭に 印刷SW = True を加えると 「このオブジェクトに値は代入することは出来ません」 となります。 だいぶ舌足らずのところがあると思いますがうまく表現出来ません。宜しくお願いします