none
VC++.NET 中ListView控件的使用问题。 RRS feed

  • 问题

  • private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
    
         /*
         //设置ListView的显示方式  
         listView1->View = View.Details;   
             
         //设置显示网格线  
         listView1->GridLines = true;  
         //设置只可以选择一项  
         listView1->MultiSelect = false;  
         //整行选中  
         listView1->FullRowSelect = true;  
           
         //设置表头  
         listView1->Columns->Add("信息",150);//名称 宽度  
         listView1->Columns->Add("来源",100);  
         listView1->Columns->Add("数值");*/
    
         ListViewItem item = gcnew ListViewItem("信息一");
         item.SubItems->Add("网络");
         item.SubItems->Add("1000");
         listView1->Items->Add(item);
    
        }



    其中注释掉代码貌似没有作用,最后四行代码则报错。

    倒数第四行:
    错误 1 error C2664: “System::Windows::Forms::ListViewItem::ListViewItem(System::String ^)”: 不能将参数 1 从“System::Windows::Forms::ListViewItem ^”转换为“System::String ^” d:\visual studio 2005\projects\ex_listview\ex_listview\Form1.h 125 

    倒数第一行:
    错误 2 error C2664: “System::Windows::Forms::ListViewItem ^System::Windows::Forms::ListView::ListViewItemCollection::Add(System::String ^)”: 不能将参数 1 从“System::Windows::Forms::ListViewItem”转换为“System::String ^” d:\visual studio 2005\projects\ex_listview\ex_listview\Form1.h 128 


    请问这是怎么回事?
    2009年4月3日 14:46

答案

  • 倒数第四行:引用类型的对象应该用^来声明
    倒数第三行:引用类型的成员应该用->访问
    倒数第二行:引用类型的成员应该用->访问
    倒数第一行:需要修复倒数第四行的错误

    MSMVP VC++
    • 已标记为答案 yangchun 2009年4月4日 1:46
    2009年4月3日 17:44
    版主

全部回复

  • 错误 2 error C2664: “System::Windows::Forms::ListViewItem::ListViewItem(System::String ^)”: 不能将参数 1 从“int”转换为“System::String ^” 
    错误 4 error C2664: “System::Windows::Forms::ListViewItem ^System::Windows::Forms::ListView::ListViewItemCollection::Add(System::String ^)”: 不能将参数 1 从“System::Windows::Forms::ListViewItem”转换为“System::String ^” 

         //把代码分析结果显示到ListView控件内
         for(temp.pp = temp.node.begin(); temp.pp != temp.node.end(); temp.pp++)
         {
          //cout << pp->getNodeId() << '\t';
          //String^ String_NodeId = Convert::ToString();
          //ListViewItem item = gcnew ListViewItem( String_NodeId);
          ListViewItem item = gcnew ListViewItem( temp.pp->getNodeId() );       /////////////////////////////错误2
          for (vector<Token >::iterator _p = temp.pp->getTokenVector()->begin();
           _p != temp.pp->getTokenVector()->end();
           _p++)
          {
           //cout << _p->getValue() << ' ';
           item.SubItems->Add(Convert::ToString(_p->getValue()) );                  ///////////////////////////错误4
           listView_Code->Items->Add(item);
          }
          //cout << endl;
         }

    如果将//String^ String_NodeId = Convert::ToString();
             //ListViewItem item = gcnew ListViewItem( String_NodeId);
    两行的注释符去掉,把ListViewItem item = gcnew ListViewItem( temp.pp->getNodeId() ); 这一行注释掉,
    则提示:错误 3 error C2664: “System::Windows::Forms::ListViewItem::ListViewItem(System::String ^)”: 不能将参数 1 从“System::Windows::Forms::ListViewItem ^”转换为“System::String ^” 

    请问该怎么办?
    2009年4月3日 7:11
  • ListViewItem item = gcnew ListViewItem( “Item1”,0);
    2009年4月3日 8:03
  • 貌似还是一样的错误...
    2009年4月3日 11:44
  • 倒数第四行:引用类型的对象应该用^来声明
    倒数第三行:引用类型的成员应该用->访问
    倒数第二行:引用类型的成员应该用->访问
    倒数第一行:需要修复倒数第四行的错误

    MSMVP VC++
    • 已标记为答案 yangchun 2009年4月4日 1:46
    2009年4月3日 17:44
    版主
  • 当单击按钮时,在listView_Code->Items->Add(item);处报错:不能在多处添加或插入项,请问有什么解决办法?
    2009年4月4日 0:50
  • 关于Windows表单类库报告的错误的问题请在.Net一般性问题版提出,提出的时候附上你的代码。
    不要在一个帖子内提出多个问题。如果有回复被标记为解答,那么这个帖子会被显示为已解决,而一些志愿者只会看未解决问题。对于在论坛搜索答案的人来说,在和问题相关的论坛查询更有效果。

    MSMVP VC++
    2009年4月4日 1:10
    版主
  • 3q

    上面的两个问题都已经解决,但是显示的时候好像出问题了。代码修后如下:
    for(temp.pp = temp.node.begin(); temp.pp != temp.node.end(); temp.pp++) {
    	 //cout << pp->getNodeId() << '\t';
    	 String^ String_NodeId = Convert::ToString( temp.pp->getNodeId() );
    	 String^ String_Node = "";
    	 ListViewItem^ item = gcnew ListViewItem( String_NodeId );
    	 for (vector<Token >::iterator _p = temp.pp->getTokenVector()->begin();
    	 _p != temp.pp->getTokenVector()->end();
    	 _p++)
    	 {
    		 //cout << _p->getValue() << ' ';
    		 String_Node += Convert::ToString( _p->getValue() );
    		 String_Node += " ";
    	 }
    	 item->SubItems->Add( String_Node );
    	 listView_Code->Items->Add(item);
    	 delete String_NodeId;
    	 delete String_Node;
    	 delete item;
    }
    String_Node += Convert::ToString( _p->getValue() );
    这一行代码返回的全部是“true”。
    请问怎么办?
    2009年4月4日 1:16
  • 不要在一个帖子内提出多个问题。如果有回复被标记为解答,那么这个帖子会被显示为已解决。
    MSMVP VC++
    2009年4月4日 1:45
    版主
  • 哈哈 

    做如下修改就好了:

    for(temp.pp = temp.node.begin(); temp.pp != temp.node.end(); temp.pp++)
         {
          //cout << pp->getNodeId() << '\t';
          String^ String_NodeId = Convert::ToString( temp.pp->getNodeId() );
          String^ String_Node = "";
          ListViewItem^ item = gcnew ListViewItem( String_NodeId );
          for (vector<Token >::iterator _p = temp.pp->getTokenVector()->begin();
           _p != temp.pp->getTokenVector()->end();
           _p++)
          {
           //cout << _p->getValue() << ' ';
           //String_Node += Convert::ToString( _p->getValue() );
           String^ temp_String_Node = gcnew String( _p->getValue() );
           String_Node = String::Concat( String_Node,temp_String_Node );
           String_Node += " ";
          }
          item->SubItems->Add( String_Node );
          listView_Code->Items->Add(item);
          delete String_NodeId;
          delete String_Node;
          delete item;
         }
    2009年4月4日 1:46