实现功能:客户端,服务端
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获取焦点
}

解决方案 »

  1.   

    我剛試過了,可以的,但是你的程序好像有點地方不對,
    for(int i=0;i<Num;i++)
    {
    tb[i] = new TextBox();//加入這句吧。
    tb[i].Name="TextBox"+i.ToString();
    tb[i].Location = new Point(100,10*i+10);
    tb[i].TabIndex = i;
    this.Controls.Add(tb[i]);
    }
      

  2.   

    无法获取输入焦点
    -----------------------
    tb[i] = new TextBox();//加入這句吧。
    tb[i].Location = new Point(100,30*i+10); // tb跟跨度过小,扰乱视线
      

  3.   

    我也试了,在Windows下这样可以的!但在WinCE 却不行! 是CE5.0的!不知道是怎么回事?