问题描述
PublicClassForm2PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickForm1.Button2=NewSystem.Windows.Forms.ButtonForm1.TabPage1.Controls.Add(Form1.Button2)Form1.Button2.Location=NewPoint(Form1.Label1.Text,Form1.Label2.Text)Form1.Button2.Size=NewSystem.Drawing.Size(79,29)Form1.Button2.TabIndex=0'Me.Button2.Text=Form2.TextBox1.TextForm1.Button2.UseVisualStyleBackColor=TrueForm1.Button2.ContextMenuStrip=Form1.ContextMenuStrip2Form1.Button2.Name=TextBox1.TextForm1.Button2.Text=TextBox1.TextAddHandlerForm1.Button2.MouseDown,AddressOfForm1.Button2_MouseDown'绑定事件处理程序AddHandlerForm1.Button2.MouseMove,AddressOfForm1.Button2_MouseMoveAddHandlerForm1.Button2.Click,AddressOfForm1.Button2_Click'绑定事件处理程序ForEachobInForm1.TabPage1.ControlsIfob.text=TextBox2.TextThenMessageBox.Show(ob.name)ob.GetType()EndIfNextMe.Visible=FalseEndSubPublicClassForm1DimjiheAsNewCollectionDimx,yAsSingleFriendWithEventsButton2,button4AsSystem.Windows.Forms.ButtonDimButtonsAsNewButtonArray(Me)FriendWithEventsLineShape2AsMicrosoft.VisualBasic.PowerPacks.LineShapePrivateSub新建网元ToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles新建网元ToolStripMenuItem.ClickForm2.Show()EndSubPrivateSubTabPage1_MouseMove(ByValsenderAsObject,ByValeAsSystem.Windows.Forms.MouseEventArgs)HandlesTabPage1.MouseMoveLabel1.Text=e.XLabel2.Text=e.YLabel3.Text=Me.TabPage1.Controls.CountEndSubPublicSubButton2_MouseMove(ByValsenderAsSystem.Object,ByValeAsSystem.Windows.Forms.MouseEventArgs)If(e.Button=Windows.Forms.MouseButtons.Left)Thensender.SetBounds(sender.Left+e.X-x,sender.Top+e.Y-y,sender.Width,sender.Height)EndIfEndSubPublicSubButton2_MouseDown(ByValsenderAsObject,ByValeAsSystem.Windows.Forms.MouseEventArgs)x=e.X'确定鼠标的按下位置y=e.YEndSubPublicSubButton2_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)MsgBox("点击:"&sender.GetType().ToString&CType(CType(sender,Button).Tag,String))MsgBox(sender.ToString())EndSubPrivateSub删除网元ToolStripMenuItem1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles删除网元ToolStripMenuItem1.ClickControlSelect(Button2)IfMe.TabPage1.Controls.Contains(Button2)ThenButton2.Controls.Find(Button2.Text,True)Me.TabPage1.Controls.Remove(Button2)EndIfEndSub在我的程序中,如果你创建3个Button2对象对,删除功能只能删除最后创建的那个Button2对象,希望大家更个我一个更好的解决方案!改进Button2对象的创建于删除功能。小弟感谢不敬!
解决方案
本帖最后由 chinaunicomx86 于 2010-11-14 10:40:52 编辑
解决方案二:
“很强的扩展性”原来如此啊。
解决方案三:
别在“xxxx元”这个地方打转转了,做点实际的项目。除非你只是想靠这个在学校里弄点声誉。步入社会,这种纠结出来的“扩展性”其实什么也不是。扩展性体现在很大很深入的行业软件应用架构方面,而小的东西如果抠不出来就不要再抠了。其实这种东西很简单,但是不适合学生去抠。带着真正实际的应用环境再来看这类问题,几分钟就可以解决。
解决方案四:
专家说的是呀!但我不是学生,是个偷懒的人,工作上的事,能叫别人做尽量叫别人做,尽可能叫电脑去做,不愿意做我就托,呵呵呵,但这个事还是为了方便工作的,能帮我一下吗?
解决方案五:
楼主威武!!!你做的东西是show个from2,然后from2给from1的Button2赋个新的Button(你很强大)删除时候根据Button2的text判断添加进去的Button并将其删除你每按一次Form2的Button1都只会给Form1的Button2换个新的Button(这句话咋这么别扭),Form1.Button2.text始终记录的是最后一次换上去的值,你靠这个判断,肯定只能删除最后一次添加的Button。说话真别扭。。。。。。。。。
解决方案六:
参考DimButtonCollectionAsNewCollectionPrivateSubForm1_Load(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMe.LoadToolStripSplitButton1.Text="删除"ToolStripSplitButton1.DisplayStyle=ToolStripItemDisplayStyle.TextDimButton1AsNewButtonButton1.Text="添加按钮"AddHandlerButton1.Click,AddressOfAddButtonButton1.Location=NewPoint(100,100)Me.Controls.Add(Button1)EndSubSubAddButton(ByValsenderAsObject,ByValeAsSystem.EventArgs)DimNewButtonAsNewButtonStaticDimButtonIDAsInteger=0ButtonID+=1WithNewButton.Location=NewPoint(10,ButtonID*40)'NewPoint(Form1.Label1.Text,Form1.Label2.Text).Size=NewSystem.Drawing.Size(79,29).TabIndex=0.UseVisualStyleBackColor=True'.ContextMenuStrip=Form1.ContextMenuStrip2.Name="Button"&ButtonID'TextBox1.Text.Text="Button"&ButtonID'TextBox1.Text'AddHandler.MouseDown,AddressOf_MouseDown'绑定事件处理程序'AddHandler.MouseMove,AddressOf_MouseMove'AddHandler.Click,AddressOf_Click'绑定事件处理程序EndWith'将button丢进collection'ButtonCollection里面存放的是所有新建的buttonButtonCollection.Add(NewButton,"Button"&ButtonID)'"Button"&ButtonID是KeyMe.Controls.Add(NewButton)'添加进fromDimDelToolStripButtonAsNewToolStripButtonDelToolStripButton.Text="删除Button"&ButtonIDDelToolStripButton.Tag=ButtonID'这里是标识ToolStripSplitButton1.DropDownItems.Add(DelToolStripButton)AddHandlerDelToolStripButton.Click,AddressOfDelButtonEndSubSubDelButton(ByValsenderAsObject,ByValeAsSystem.EventArgs)DimButtonIDAsIntegerButtonID=sender.Tag'获取标识DimNowButtonAsButtonNowButton=ButtonCollection("Button"&ButtonID)'获取buttonRemoveHandlerNowButton.Click,AddressOfDelButton'移除绑定事件Me.Controls.Remove(NowButton)'删除按键NowButton.Dispose()'销毁ButtonCollection.Remove("Button"&ButtonID)'将集合里面的对应项删除掉ToolStripSplitButton1.DropDownItems.Remove(sender)'移除菜单里面的删除按钮EndSub
解决方案七:
通过Control.Controls属性,可以遍历所有的control。Lz可以这样,凡是动态添加的Control,都从自己的Control类继承,然后遍历Form.Controls集合去删除它。
解决方案八:
QQRN(笨QQ-馊主意提供者)的代码很成功!我已经理解你的算法,下面的工作在你的算法基础上进行改进。mooniscrazy(月色疯狂)哥的建议不错,我最开始是这样想的,但是当按钮达到上百个,删除其中的一个是很困难的,(说白了是我不会写)!感谢大家的支持!不知大家用过华为T2000网管没有,按钮类似于T2000网管中的网元,网元(按钮)对象可移动,这个功能我已经实现,创建网元(按钮),Me.Controls.Add(Button1)就可以搞定,但是删除其中的一个按钮(网元)我就不会了。sp1234(软件劫持和盗号:人傻钱多速来)哥的话可以理解,但是很多事不能轻易放弃!因为大家做的事属科研工作,难度是很大的,在需求分析上,我定义为可行,就因一点困难就后退,你们口口声声的创业,也就是一句空话!