问题描述
点击按钮,会出来10textbox,但是怎么不刷新呢?程序如下:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespaceWindowsFormsApplication1{publicpartialclassForm1:Form{classTex:TextBox{intx;publicTex(intin_x){x=in_x;}}Tex[]Texts;voidcaiji(){//Controls.Clear();intshang=100;intx=50;inty=50;Texts=newTex[10];Randomrd=newRandom();for(inti=0;i<10;i++){//创建textTexnewText=newTex(i);//newText.Clear();//newText.Text=Convert.ToString(++m);newText.Text=Convert.ToString(rd.Next(100,200));//foreach(TexTexinTexts)//{//}//设定text的位置newText.Location=newPoint(100+shang*i,100);//设定text大小newText.Size=newSize(x,y);//newText.BackColor=Color.LightGray;//将新按钮添加到窗体this.Controls.Add(newText);//继承//添加到数组//Texts[i]=newText;//不仅要添加到窗体,也要添加到数}}publicForm1(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){timer1.Enabled=true;timer1.Interval=1000;}privatevoidtimer1_Tick(objectsender,EventArgse){caiji();}}}
解决方案
解决方案二:
1、把触发周期改成10秒,看有木有效果?2、如果有效果,就说明触发周期太短,文本框的值变化太快(以至于肉眼无法辨识,误认为没有变化)或者1、把这行代码newText.Text=Convert.ToString(rd.Next(100,200));
改成newText.Text=i.ToString();
排除你点子背,每次触发Random出来的随机数都是相同的(这个可能性不大)
解决方案三:
你在添加新的Textbox的时候并没有清除之前的Textbox所以x坐标不断向后延伸远远超出了Form的可视范围所以你看起来Textbox并没有变化
解决方案四:
按照第一个的没有效果呢,我也觉得是第二个说的有道理,那怎么清空的呀?
解决方案五:
那我应该怎么改呀
解决方案六:
引用3楼hhm790629472的回复:
按照第一个的没有效果呢,我也觉得是第二个说的有道理,那怎么清空的呀?
caiji()这个方法的第一行加newText.Text=“”;不就行啦?
解决方案七:
每次执行caiji时,你的10个Tex控件的location都是一样的。在上一次循环添加的那个Tex下面。1.执行caiji时,清除原来生成的Tex控件。this,Controls.oftype<tex>().tolist().foreach(item=>{this.controls.remove(item);});2.找到上一次的tex控件直接赋值。3.如果不想清除,使用newText.BringToFront();
解决方案八:
引用5楼qq_17486399的回复:
Quote: 引用3楼hhm790629472的回复:
按照第一个的没有效果呢,我也觉得是第二个说的有道理,那怎么清空的呀?caiji()这个方法的第一行加newText.Text=“”;不就行啦?
newText是在for循环里面定义的,放到外面出错误啊?
解决方案九:
newText.Location=newPoint(100+shang*i,100);
你这个i应该作为全局参数,不然你每次都生成了,但与之前的重叠了
解决方案十:
for(inti=0;i<10;i++)
改成for(intj=0;j<10;j++){i+=j;
解决方案十一:
当然全局的inti=0;
定义在方法外面知道的吧
解决方案十二:
引用6楼yyantifa的回复:
每次执行caiji时,你的10个Tex控件的location都是一样的。在上一次循环添加的那个Tex下面。1.执行caiji时,清除原来生成的Tex控件。this,Controls.oftype<tex>().tolist().foreach(item=>{this.controls.remove(item);});2.找到上一次的tex控件直接赋值。3.如果不想清除,使用newText.BringToFront();
还是不行,为什么我用newtext.clear没用呢
解决方案十三:
publicForm1(){InitializeComponent();this.timer1.Enabled=true;//设置timer控件的Tick事件触发的时间间隔this.timer1.Interval=1;//停止计时this.timer1.Stop();}intcounts=0;privatevoidtimer1_Tick(objectsender,EventArgse){count+=1;this.tbTimer.Text=count.ToString();}privatevoidbutton3_Click(objectsender,EventArgse){this.timer1.Start();}
解决方案十四:
从新谢了一遍代码,还是不行,调试的时候,定时器每1秒触发一次后,数值是改变的,只是不知道newtext为什么没有变化,并且我用newtext.Controls.Clear();清空了呀!谢谢大家!usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespacecaiji{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){timer1.Enabled=true;timer1.Interval=1000;this.timer1.Start();}privatevoidtimer1_Tick(objectsender,EventArgse){caiji();//this.tbTimer.Text=count.ToString();}classtex:TextBox{publictex(intin_x)//方法{}}tex[]texts;voidcaiji(){//Controls.Clear();intshang=100;intx=50;inty=50;texts=newtex[10];Randomrd=newRandom();for(inti=0;i<10;i++){texnewtext=newtex(i);newtext.Controls.Clear();newtext.Location=newPoint(100+shang*i,100);newtext.Size=newSize(x,y);this.Controls.Add(newtext);newtext.Text=Convert.ToString(rd.Next(100,200));}}//值是变化着,只是没有写进来}}
解决方案十五:
引用12楼wsh_mar的回复:
publicForm1(){InitializeComponent();this.timer1.Enabled=true;//设置timer控件的Tick事件触发的时间间隔this.timer1.Interval=1;//停止计时this.timer1.Stop();}intcounts=0;privatevoidtimer1_Tick(objectsender,EventArgse){count+=1;this.tbTimer.Text=count.ToString();}privatevoidbutton3_Click(objectsender,EventArgse){this.timer1.Start();}
不懂啊
解决方案:
引用10楼starfd的回复:
当然全局的inti=0;定义在方法外面知道的吧
定义了,还是不行呢