▲:线程类代码中更新Form控件问题
实现功能:客户端,服务端
1.客户端建立一个空窗体
2.从服务端传给客户端要生成的TextBox数量
3.客户端接收,并在窗体上生成TextBox数组
4.客户端在输入完最后一个TextBox内容后,将所有TextBox内容返回服务端
当前问题:
VS2005下;以上操作可以正常接收刷新当前窗体,并激活当前窗体,但是无论如何获取到的第一个TextBox无法获取输入焦点,通过在窗体上点击鼠标才可以!
在网上搜索结果说是委托不能对新窗体操作,不知道到怎么回事,请高手赐教!
//从服务端接收到待生成的TextBox个数
string recvString= " ";
//Form_Load()
{
Thread thread = new Thread(new ThreadStart(targett));
thread.Start();
}
public delegate void MyInvoke(string str); //str 即为接收到的字符串
private void targett()
{
while (bb) //bb=true;
{
Byte[] bbb = new Byte[1024];
string aa = " ";
int bytes;
bytes = sock.Receive(bbb, bbb.Length, 0);
aa += System.Text.Encoding.Default.GetString(bbb, 0, bytes);
recvString += aa;
//使用委托传值给新建窗体
MyInvoke myIn = new MyInvoke(CreateNewForm);
this.BeginInvoke(myIn, new object[] { recvString });
}
}
//刷新当前窗体,根据传入的字符串生成新窗体
public CreateNewForm(String str)
{
this.Controls.Clear();
int Num=Convert.ToInt32(str); //转化为数字
TextBox []tb=new TextBox[Num];
for(int i=0;i <Num;i++)
{
tb[i].Name= "TextBox "+i.ToString();
tb[i].Location = new Point(100,10*i+10);
tb[i].TabIndex = i;
this.Controls.Add(tb[i]);
}
this.Activate(); //激活当前窗体为主窗体
tb[0].Focus(); //第一个TextBox获取焦点
}
------解决方案--------------------我剛試過了,可以的,但是你的程序好像有點地方不對,
for(int i=0;i <Num;i++)