本帖最后由 overset 于 2011-12-15 08:56:08 编辑

解决方案 »

  1.   

    关键是你这个SSP.okid = uid ;
    uid此时到底是什么值?
      

  2.   

    uid的值是这么定义的 public string uid=string.Empty;它是FORM2从FORM1得到的,在给SSP.okid = uid 的时候,uid有值。
      

  3.   

    这个问题的关键是 你的 
                        form3 SSP = new form3();
                      SSP.okid = uid ;//此处SSP.okid 也得到值了
                        SSP.ShowDialog();
    这个form3与你实际操作是不是同一个对象了?你能确定给赋值okid 与你操作的是同一实体对象的话 就没有问题
      

  4.   

     public string okid = string.Empty;把这个定义,换成,静态的
     public static string okid = string.Empty;
      

  5.   

    留意下Selectid方法是在窗体加载后执行的,还是在构造函数内执行的
      

  6.   

    这个之前试过 报错 Member 'okid' cannot be accessed with an instance reference; qualify it with a type name instead
      

  7.   

    第一点:
      在两个类之间传值,在.net里一般不直接使用public的变量。一搬传值都用属性。form3       private string okid = string.Empty;
           
            public string Okid
            {
                get
                {
                    return okid;
                 }
                set
                {
                    okid = value;
                 }
            }        private void Selectid()
            {            if (okid .Trim() != "")//okid 却一直是空
                {
                  MessageBox.Show("OK");
                }
                else { MessageBox.Show("ERR");}
            }
    第二点就是:确保你在给okid付完值之后才调用的 Selectid()这个函数。
      

  8.   

    我是在给okid付完值之后才调用的 Selectid()这个函数
      

  9.   

     Selectid()这个方法必须放在fromload中去执行,或者窗体显示之后再操作okid;在构造之后你才赋值,所以需窗体显示之后才能获取到值。
      

  10.   

    重载构造函数
    form3(string _okid )
    {
    this.okid=_okid ;
    }
      

  11.   

    public string okid = string.Empty;改成public static string okid=string.Empty错误的根本原因是同一个类的对象不同,多看点什么是值类型,什么是引用类型
      

  12.   

    你执行者一句的时候 调试跟进去 看看这个okid 有么有值
      

  13.   

    form1的值 传到form2中 可以再加载form2(load)的时候传 而不是再显示窗体的时候传