none
FormView、リストボックスについて。 RRS feed

  • 質問

  • こんにちは。

    今Visual Studio 2005とMicrosoft Access 2002 - 2003でプログラムを作っています。

    リストボックスを使い、リストの最後に新しい項目を追加したいのですが、

    list.InsertString(-1,"あいう");

    とすると次のようなエラーが出ます。エラー 1 error C2039: 'InsertString' : 'ATL::CStringT<BaseType,StringTraits>' のメンバではありません。

    これはどのように対処すればよいのですか?何かヘッダーをインクルードする必要がありますか?

    プロジェクト構成は、テンプレート:MFCアプリケーション アプリケーションの種類:シングルドキュメント(S) 基本クラス:CFormView です。

    前に基本クラスCViewで作った時はうまくいったのですが、今回はCFormViewで作りたいので教えていただけると嬉しいです。

    また、質問するのが初めてなので何か不適切な事など書いていたら申し訳ございません。

    2010年11月12日 10:57

回答

  • もしかして、listの型はCListBoxであることを期待されていますか?

    listの型を確認してください。

     

    Errorの内容は、CStringTにInsertStringという名のMethodがない、ということです。

    Insertならありますね。

     

    また、Literal Stringは_T("あいう")と書きましょう。

    • 回答としてマーク 山本春海 2010年12月1日 7:12
    2010年11月12日 12:04
  • 前に基本クラスCViewで作った時はうまくいったのですが、今回はCFormViewで作りたいので教えていただけると嬉しいです。

    CViewでうまくいったのなら、ほぼその時のコードのままで動くはずです。
    なぜならCFormViewの祖先(継承元)はCViewだからです。以前のコードを
    参考にしてみたらどうでしょう。
    ちなみにリストボックス(=CListBoxクラス)に項目を追加するのは
    CListBox::AddString()やCListBox::InsertString()メンバ関数を
    使っているはずですね。つまり次のようなコードが、どこかにあるはずです。
    CListBox  m_ListBox; //リストボックスの実体がどこかのクラスのメンバにいるはずですね
     :
    m_ListBox::AddString( _T("あいう")); //
    とか、
    m_ListBox::InsertString( -1, _T("なんちゃら"));
    など

    • 回答としてマーク 山本春海 2010年12月1日 7:12
    2010年11月16日 5:33
  • 前に基本クラスCViewで作った時はうまくいったのですが、今回はCFormViewで作りたいので教えていただけると嬉しいです。

    質問内容を見直していて気になったので書いておきます。
    以前にCViewで作ったと言う話なのですが、その時にリストボックスコントロールを制御した時に使ったクラスを覚えていますか?
    クラスの違いはインスタンスの名前(変数名)で決まるわけではなく、どのクラスのインスタンスとして生成したかに寄ります。
    もしこの部分を理解されていないのでしたら、C++言語の段階で既に知識が不足している事になります。

    MFCを使ってアプリケーションを作成する為には、C++言語の文法とクラスの考え方、オブジェクト指向の考え方が必要になります。
    この部分の知識が足りない状態だと実際にソース上に書かれているコードの意味が理解出来ないと思います。
    コードの意味が理解できないまま、字面だけで覚えてしまうと全く応用が利かない状態になりますし、
    自分でデバッグする事も困難になると思います。

    C++言語の文法とクラスの考え方、オブジェクト指向の考え方について知識が足りない状態なのでしたら
    まず、そちらの勉強を先に行う事をお勧めします。
    足りないまま進んでも多分、後でそのしわ寄せに悩む事になると思いますよ。
    C++はかなり融通の利く言語なので大概の事はできてしまいますが、
    それだけに基礎的な知識の重要性も高くなります。
    一見遠回りに見えても結果的には基礎からしっかり学んだ方が早道になります。
    一足飛びにアプリケーションの作成をしようとしているのであれば、
    一度立ち止まって足元を見直すことをお勧めします。

     


    解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
    • 回答としてマーク 山本春海 2010年12月1日 7:23
    2010年11月17日 5:02

すべての返信

  • もしかして、listの型はCListBoxであることを期待されていますか?

    listの型を確認してください。

     

    Errorの内容は、CStringTにInsertStringという名のMethodがない、ということです。

    Insertならありますね。

     

    また、Literal Stringは_T("あいう")と書きましょう。

    • 回答としてマーク 山本春海 2010年12月1日 7:12
    2010年11月12日 12:04
  • 回答ありがとうございます。

    Listの型というのは、、、***View.hに書かれてある

    public:
     CString list;

    このことでしょうか???

    また、CStringTにInsertStringというメソッドがない場合、リストの最後の項目に新しい項目を追加したいとき

    InsertStringのような働きのするものはないのですか???

     

    2010年11月12日 14:14
  • >CString list;

    >このことでしょうか???

    そうです。CStringは文字列を扱うClassです。リストボックスとは直接関係ありませんよ。

     

    >また、CStringTにInsertStringというメソッドがない場合、リストの最後の項目に新しい項目を追加したいときInsertStringのような働きのするものはないのですか???

    そのListBoxを制御するメンバ変数はありませんか?そのメンバ変数に対してInsertStringを呼べばよいです。

    メンバ変数が見つからない場合は、該当するDialog ResourceからListBoxのメンバ変数を追加してください。右クリックすれば、"メンバ変数の追加"という項目が見つかると思います。

    2010年11月12日 14:38
  • まず、CStringというクラスが何をする為のクラスなのか調べましょう。

    Webが使える環境であるのならWeb上で検索するも良し、MSDNで調べるも良し。
    きちんと調べれば、CStringクラスとリストボックスコントロールが全く関係無い事はわかるはずです。

    まずはきちんと調べてみる事から始める事をお勧めします。
    内容的には調べればすぐにわかる事ですから、掲示板で質問するより効率がいいはずです。
    逆に調べても分からなかったのであれば、どういう調べ方をしてわからなかったのかを
    書いた方が良いと思います。調べ方に関してのアドバイスがもらえると思います。

    掲示板は便利なようですが、すぐに答えてもらえると言う保証は有りませんし、
    質問内容によってはレスが全くつかないなんて事もありえます。
    まずは調べて見て解決できないのかを確認した方が良いと思います。

     


    解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
    2010年11月16日 3:05
  • 前に基本クラスCViewで作った時はうまくいったのですが、今回はCFormViewで作りたいので教えていただけると嬉しいです。

    CViewでうまくいったのなら、ほぼその時のコードのままで動くはずです。
    なぜならCFormViewの祖先(継承元)はCViewだからです。以前のコードを
    参考にしてみたらどうでしょう。
    ちなみにリストボックス(=CListBoxクラス)に項目を追加するのは
    CListBox::AddString()やCListBox::InsertString()メンバ関数を
    使っているはずですね。つまり次のようなコードが、どこかにあるはずです。
    CListBox  m_ListBox; //リストボックスの実体がどこかのクラスのメンバにいるはずですね
     :
    m_ListBox::AddString( _T("あいう")); //
    とか、
    m_ListBox::InsertString( -1, _T("なんちゃら"));
    など

    • 回答としてマーク 山本春海 2010年12月1日 7:12
    2010年11月16日 5:33
  • 前に基本クラスCViewで作った時はうまくいったのですが、今回はCFormViewで作りたいので教えていただけると嬉しいです。

    質問内容を見直していて気になったので書いておきます。
    以前にCViewで作ったと言う話なのですが、その時にリストボックスコントロールを制御した時に使ったクラスを覚えていますか?
    クラスの違いはインスタンスの名前(変数名)で決まるわけではなく、どのクラスのインスタンスとして生成したかに寄ります。
    もしこの部分を理解されていないのでしたら、C++言語の段階で既に知識が不足している事になります。

    MFCを使ってアプリケーションを作成する為には、C++言語の文法とクラスの考え方、オブジェクト指向の考え方が必要になります。
    この部分の知識が足りない状態だと実際にソース上に書かれているコードの意味が理解出来ないと思います。
    コードの意味が理解できないまま、字面だけで覚えてしまうと全く応用が利かない状態になりますし、
    自分でデバッグする事も困難になると思います。

    C++言語の文法とクラスの考え方、オブジェクト指向の考え方について知識が足りない状態なのでしたら
    まず、そちらの勉強を先に行う事をお勧めします。
    足りないまま進んでも多分、後でそのしわ寄せに悩む事になると思いますよ。
    C++はかなり融通の利く言語なので大概の事はできてしまいますが、
    それだけに基礎的な知識の重要性も高くなります。
    一見遠回りに見えても結果的には基礎からしっかり学んだ方が早道になります。
    一足飛びにアプリケーションの作成をしようとしているのであれば、
    一度立ち止まって足元を見直すことをお勧めします。

     


    解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
    • 回答としてマーク 山本春海 2010年12月1日 7:23
    2010年11月17日 5:02