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,值,布局位置等后,再push_back到vector中,而不是一开始就定义一大堆没有实际意义的控件.
.(觉得理论上应该这样,没试过~).
不清楚你要把生成的空间放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>
View Code

修改后的代码如下:

<%@ 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>
View Code

 

总结:修改编码格式为UTF-8

以上是关于vc++ 运行中新建Label (了解vector的也请进)的主要内容,如果未能解决你的问题,请参考以下文章

如何用VC编写一个程序,运行打开指定网页

pycharm中新建并且运行django

Android之activity中新建控件

Maven入门1-在Eclipse中新建Maven Web项目

Eclipse中新建jsp文件访问页面时乱码问题

如何在bootAdmin-ui中新建顶部菜单及页面跳转