VB如何点击command就自动添加一个label控件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB如何点击command就自动添加一个label控件相关的知识,希望对你有一定的参考价值。

如题,在vb中单击command,然后可以自动在label1控件数组中添加一个label控件。急啊!求高人解答。给出详细代码。

根据我的判断。前面两个应该是错的。是创建、而不是显示已有的。
有两种方法,以下代码是简便的一种:
'(创建一个按钮即可运行)

Private hTimes As Long '这里是创建了几个Label的计数器

Private Sub Command1_Click()
Dim ExLabel As Label
hTimes = hTimes + 1
Set ExLabel = Me.Controls.Add("VB.Label", "label" & LTrim(Str(hTimes)))
With ExLabel '标准的几个属性,可以根据需要更改
.Width = 2415
.Height = 255
.Left = 0
.Top = hTimes * .Height '方位长度
.Caption = "hello world" '显示的文字
.Visible = True '显示的属性
End With
End Sub

如还有疑问,请追问。
答案系原创
参考技术A 两种方法:

一. 在command1点击事件中加入语句: if text1.text="now()" then label1.caption=now()

二. 在VB里点"工程"->"部件", 在"控件"选项卡里选取"Microsoft Script Control 1.0", 然后确定. 在工具箱找到ScriptControl控件, 添加到窗体中, 再添加一个TextBox, 一个Command, 一个Label. 然后加入如下代码:

Private Sub Command1_Click()
Dim s As String
s = "function RunThis()" & vbCrLf & "RunThis=" & Text1.Text & vbCrLf & "end function"
ScriptControl1.AddCode s
Label1.Caption = ScriptControl1.Run("RunThis")
End Sub

此后你可以在text1中输入任何表达式, 包括 now, time, date, 5+4-1, msgbox "Hello!", 执行结果都会在label1显示出来.
参考技术B 使用load方法
Private Sub Command1_Click()
Load Label1(1)
'设置位置
Label1(1).Top = 50
Label1(1).Left = 0
'设置内容
Label1(1).Caption = "haha"
'使新的label可见(默认是不可见的)
Label1(1).Visible = True
End Sub追问

要求是控件数组,这样不是每次都添加的label1(1)吗?

追答

这只是个演示程序 数组你随便改啊 加个for循环就可以了

本回答被提问者和网友采纳
参考技术C 举例如下,你可以自行完善:

Private Sub Command1_Click()
Dim nextN As Integer
nextN = Label1.UBound + 1
Load Label1(nextN)
With Label1(nextN)
.Caption = "Label1-" & nextN
.Width = Label1(0).Width
.Height = Label1(0).Height
.Left = Label1(0).Left
.Top = Label1(nextN - 1).Top + Label1(nextN - 1).Height
.Visible = True
End With
End Sub
参考技术D
Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
复制前一个 label1 把 坐标随机化。

想要多少个,有多少个…想楼上那么加label控件,那我要100个,加到什么时候去了。。

点击按钮在panel中动态添加label控件

asp.net c#网站开发页面中有一个Panel1,一个Button1,我想实现每点击一次Button1就向Panel1中添加一个label,实现label累加的效果,但现在的效果是我点击了button页面就刷新后始终只有一个label显示在Panel1中,我用的是
protected void Button1_Click(object sender, EventArgs e)

Label label = new Label();
label.Text=Convert.ToInt32(Session["num"])++;
this.Panel1.Controls.Add(label);

我想是页面刷新后重新加载了,前一次点击添加的label就不存在了,不知道怎么实现我想要的效果,求大哥们帮忙

实现这个功能的方法很多,如果用javascript的话,可以这样:
在页面的<asp:panel></asp:panel>这个标签里添加一个<Div></Div>,div中将label控件包含进去;在Button1的客户端的click中写个函数,复制页面元素,主要是应用javascript的cloneNode方法,可以查找网上资料,这个方法不需要刷新页面,速度快。

方法二:
你这样做未必就没有添加label,你可以在点击一次按钮后,在页面上看它的html代码,调试一下错误所在,看页面上是否会有两个label标签。

代码如下,只是示例:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default6.aspx.cs" Inherits="Default6" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
<script type="text/javascript">
function insertMessage()
if(document.getElementsByTagName("tbody").length<16)
var oNewNode = document.getElementById("ass").firstChild.cloneNode(true);
document.getElementById("ass").appendChild(oNewNode);
else
alert("最多只能同时上传10个附件!");
return false;


function moveMessage()
if(document.getElementsByTagName("tbody").length>3)
var oOldNode = document.getElementById("ass").lastChild;
oOldNode.parentNode.removeChild(oOldNode);


</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<table><tr><td>
上传附件:<a href="###" onclick="insertMessage()">[+]</a> <a href="###" onclick="moveMessage()">
[-]</a>
<table id="ass">
<tr>
<td style="height: 22px">
附件:<asp:FileUpload unselectable="on" ID="filePost" runat="server" /></td>
</tr>
</table></td></tr>
</table>
</div>
</form>
</body>
</html>
参考技术A 比较简单的
只是每一次回送就多添加一个
参考技术B 在load里面加条件判断
if(!ispostback)

//添加label
参考技术C 刷新后还有?
page_load

if(!IsPostBack && Session["panel"]!=null)
Panel1 = (Panel)Session["panel"];

protected void Button1_Click(object sender, EventArgs e)

Label label = new Label();
label.Text=Convert.ToInt32(Session["num"])++;
this.Panel1.Controls.Add(label);
Session["panel"] = Panel1;
参考技术D 实现这个功能的方法很多,如果用javascript的话,可以这样:
在页面的<asp:panel></asp:panel>这个标签里添加一个<Div></Div>,div中将label控件包含进去;在Button1的客户端的click中写个函数,复制页面元素,主要是应用javascript的cloneNode方法,可以查找网上资料,这个方法不需要刷新页面,速度快。
方法二:
你这样做未必就没有添加label,你可以在点击一次按钮后,在页面上看它的html代码,调试一下错误所在,看页面上是否会有两个label标签。
代码如下,只是示例:
<%@
Page
Language="C#"
AutoEventWireup="true"
CodeFile="Default6.aspx.cs"
Inherits="Default6"
%>
<!DOCTYPE
html
PUBLIC
"-//W3C//DTD
XHTML
1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
>
<head
runat="server">
<title>无标题页</title>
<script
type="text/javascript">
function
insertMessage()

if(document.getElementsByTagName("tbody").length<16)

var
oNewNode
=
document.getElementById("ass").firstChild.cloneNode(true);
document.getElementById("ass").appendChild(oNewNode);

else

alert("最多只能同时上传10个附件!");
return
false;


function
moveMessage()

if(document.getElementsByTagName("tbody").length>3)
var
oOldNode
=
document.getElementById("ass").lastChild;
oOldNode.parentNode.removeChild(oOldNode);


</script>
</head>
<body>
<form
id="form1"
runat="server">
<div>
<table><tr><td>
上传附件:<a
href="###"
onclick="insertMessage()">[+]</a>
<a
href="###"
onclick="moveMessage()">
[-]</a>
<table
id="ass">
<tr>
<td
style="height:
22px">
附件:<asp:FileUpload
unselectable="on"
ID="filePost"
runat="server"
/></td>
</tr>
</table></td></tr>
</table>
</div>
</form>
</body>
</html>

以上是关于VB如何点击command就自动添加一个label控件的主要内容,如果未能解决你的问题,请参考以下文章

vb怎么每隔一秒自动点击按钮

怎么更改vb中label标签文字的大小

label里的文字如何换行啊??

点击按钮在panel中动态添加label控件

VB 可以让 command显示为2D吗?不是3D的.

vb如何点击一个label直接复制label里面的信息?