vc++ 运行中新建Label (了解vector的也请进)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vc++ 运行中新建Label (了解vector的也请进)相关的知识,希望对你有一定的参考价值。
我在设计一个程序 (用的vc++ 窗体应用程序)
希望在按下一个按钮后
可以新建一个Label (你可以新建无数个Label)
或者是用户输入一个n,可视化窗体后就有n个label;
我尝试了 vector ,也许可行:
vector<System::Windows::Forms::Label^> allabe(n,label1);
vector<System::Windows::Forms::Label^> allabe;
vector<System::String^> allabe;
都会报错:
D:\vs\VC\include\xmemory(200): error C3699: “&&”: 不能在类型“System::String ^”上使用此间接寻址
1> D:\vs\VC\include\vector(421): 参见对正在编译的类 模板 实例化“std::allocator<_Ty>”的引用
1> with
1> [
1> _Ty=System::String ^
1> ]
D:\vs\VC\include\xmemory(200): error C3699: “&&”: 不能在类型“System::Windows::Forms::Label ^”上使用此间接寻址
但是:
vector<std::string> sdf(9,"ds");
可行
顺便问一下 我这方法可行吗?
我用vector<Label^>不行,可我用vector<system::String^>居然也不行
(我是在:
public ref class
public:
vector<Label^>.........
void ....()
vector<String^> .....
.(觉得理论上应该这样,没试过~).
不清楚你要把生成的空间放vector里面做什么用处,
如果我处理这种需求,会先定义一个生成控件的函数,函数的返回值为控件的ID,
然后用for循环增加,同时用一个数组记录已生成的ID号.
-----------------------------------------
建立你还是换个思路吧,Label控件直接放界面上(界面本身就是个容器,没必要再开一片空间),用一个数组保存控件的名称即可(便于检索和操作),我自己试了一下,应该是可行的,参考下面的代码:
1: 定义一个数组,用于保存已经生成的Label名称.
private: System::Collections::ArrayList m_arLabelMap ;
2:生成控件
System::Windows::Forms::Label^ lab = gcnew System::Windows::Forms::Label();
lab->Name="label"+ this->m_arLabelMap.Count.ToString();
lab->Text="Label"+this->m_arLabelMap.Count.ToString();
lab->Width=100;
lab->Height=20;
m_arLabelMap.Add(lab->Name);
flowLayoutPanel1->Controls->Add(lab); //直接用的流布局面板,没有考虑布局,
3: 定位控件
array<System::Windows::Forms::Control^> ^controlList = this->Controls->Find("Label0", true);//Label0为选中控件或指定控件
for each (System::Windows::Forms::Control^ control in controlList)
MessageBox::Show(((Label^)control)->Text);
((Label^)control)->Text="xxxxxxxxx";
((Label^)control)->BackColor= System::Drawing::Color::FromArgb(255,255,0,0);
上面只简单试验了一下,没有做什么操作,觉得应该是可行的.
以前从没有接触过VC++ CLR ,前几天的回答还停留在VC++的方式,可能误导你了,在此抱歉~ 参考技术A vc++ 运行中新建Label (了解vector的也请进)
悬赏分:20 - 离问题结束还有 13 天 19 小时
我在设计一个程序 (用的vc++ 窗体应用程序)
希望在按下一个按钮后
可以新建一个Label (你可以新建无数个Label)
或者是用户输入一个n,可视化窗体后就有n个label;
我尝试了 vector ,也许可行:
vector<System::Windows::Forms::Label^> allabe(n,label1);
vector<System::Windows::Forms::Label^> allabe;
vector<System::String^> allabe;
都会报错:
D:\vs\VC\include\xmemory(200): error C3699: “&&”: 不能在类型“System::String ^”上使用此间接寻址
1> D:\vs\VC\include\vector(421): 参见对正在编译的类 模板 实例化“std::allocator<_Ty>”的引用
1> with
1> [
1> _Ty=System::String ^
1> ]
D:\vs\VC\include\xmemory(200): error C3699: “&&”: 不能在类型“System::Windows::Forms::Label ^”上使用此间接寻址
但是:
vector<std::string> sdf(9,"ds");
可行
顺便问一下 我这方法可行吗?
问题补充:我用vector<Label^>不行,可我用vector<system::String^>居然也不行
(我是在:
public ref class
public:
vector<Label^>.........
void ....()
vector<String^> .....
Eclipse中新建jsp文件访问页面时乱码问题
新建.jsp文件,charset和pageEncoding默认是ISO-8859-1,这样的话访问页面时会出现乱码,解决办法:将charset和pageEncoding改为UTF-8(或者GBK/GB2312/GB18030,如果想具体了解几种编码的前世今生可参考另一篇文章:网页编码就是那点事).
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> </body> </html>
修改后的代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <script type="text/javascript">alert("中文!");</script> 中文! </body> </html>
总结:修改编码格式为UTF-8
以上是关于vc++ 运行中新建Label (了解vector的也请进)的主要内容,如果未能解决你的问题,请参考以下文章