解决方案 »

  1.   

    1. windows的时钟同步的实现过程是这样子的: 
        前提: 有一台有正确时间的服务器.do
    {
    在时间点A向服务器请求当前时间
    在时间点B得到服务器返回的时间点C
    将当前机器时间 + C- (A+B/2)
    }
    while(A+B/2 != C)
      

  2.   

    2.   方案一: 使用Linqthis.Controls.Where(c => c is Label && c.Name.contains("lblTime"));方案二, 反正你查找出来的也是要循环改值, 直接循环controls:foreach(var c in this.Controls)
    {
         if(c is label && c.Name.contains("lblTime")
         {
              c.Coler = red;
          }
    }
      

  3.   

    参见: http://www.codeproject.com/Articles/18918/Windows-System-Time-Synchronizer
      

  4.   

    To 3楼windwolfer :this.Controls.Where(c => c is Label && c.Name.contains("lblTime")); ? 不行吧。
      

  5.   

    foreach (Label l in this.Controls.OfType<Label>().Where(x => x.Name.Contains("lblTime") && x.ForeColor == Color.Red))
    {
        l.Text = "ok";
    }
      

  6.   

    呵呵,谢谢 caoxhy 的编码,我也学习了。
    还有一个问题:2)Controls.Find() 提示 根据控件的name属性搜索控制并生成由所有匹配项组成的数组,我在BAIDU搜索Controls.Find()的使用,就是没发现一个生成由所有匹配项组成的数组的用法,多为使用[0]使用第一个匹配项,大家能否举例说明下生成由所有匹配项组成的数组的用法
      

  7.   

    Control[] arr = this.Controls.Find("名字", true);
    但是它只能精确匹配
      

  8.   

    嗯,它只能精确匹配名字,那我觉得没必要 查找生成Control[] 了,也不知道MS 程序员是怎么想的。
    那还不如 Control  arr = this.Controls.Find("名字", true);
      

  9.   

    当然有必要,比如说
    panel1中又嵌套了一个key叫panel1的控件,你要找里面那个。
      

  10.   

    还是搞不懂,不耻提问:在Winform中,所有的控件名都是唯一的啊,控件的名称精确匹配,使用Controls.find(),这生成控件数组?panel1中又嵌套了一个key叫panel1的控件,?有两个名为panel1的控件?,还是不解
      

  11.   

    我认为Find里面应该是直接用Hash算法直接精确定位到控件, 而不是用循环匹配这样的方式.