+ -
当前位置:首页 → 问答吧 → C# WINFORM窗体之间传值丢失

C# WINFORM窗体之间传值丢失

时间:2011-12-15

来源:互联网

form2
C# code

            form3 SSP = new form3();
            SSP.okid = uid ;//此处SSP.okid 也得到值了
            SSP.ShowDialog();



C# code

form3

       public string okid = string.Empty;

        private void Selectid()
        {

            if (okid .Trim() != "")//okid 却一直是空
            {
              MessageBox.Show("OK");
            }
            else { MessageBox.Show("ERR");}


        }



我其他窗体传值这么传,都能传过来,就是这个窗体不行。这个窗体弹出顺序(FORM1-(ShowDialog方式)-(ShowDialog方式)->FORM2-(ShowDialog方式)->FORM3(本窗体))

作者: overset   发布时间: 2011-12-15

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

作者: sdfkfkd   发布时间: 2011-12-15

引用 1 楼 sdfkfkd 的回复:
关键是你这个SSP.okid = uid ;
uid此时到底是什么值?
uid的值是这么定义的 public string uid=string.Empty;

它是FORM2从FORM1得到的,在给SSP.okid = uid 的时候,uid有值。

作者: overset   发布时间: 2011-12-15

好像其他窗体传也传不过来值···

作者: overset   发布时间: 2011-12-15

引用楼主 overset 的回复:
▪ Salesforce公司的云计算服务有...▪ 如何降低虚拟化系统的安全风险?▪ 云中数据安全靠技术还是制度?▪ 云计算产业链全景图是怎样?▪ 向私有云过渡的步骤有哪些?
form2

C# code

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

作者: yanbuodiao   发布时间: 2011-12-15

public string okid = string.Empty;

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

作者: lone_boy   发布时间: 2011-12-15

该回复于2011-12-15 09:17:19被管理员删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
#7楼 得分:0回复于:2011-12-15 09:15:33
引用 4 楼 yanbuodiao 的回复:
引用楼主 overset 的回复:
▪ Salesforce公司的云计算服务有...▪ 如何降低虚拟化系统的安全风险?▪ 云中数据安全靠技术还是制度?▪ 云计算产业链全景图是怎样?▪ 向私有云过渡的步骤有哪些?
form2

C# code

form3 SSP = new form3();
SSP.okid = uid ;//此处SSP.okid 也得到值了
……
这个问题的关……



是的,可以使用单例模式。

作者: cjnkd   发布时间: 2011-12-15

引用 4 楼 yanbuodiao 的回复:
引用楼主 overset 的回复:
▪ Salesforce公司的云计算服务有...▪ 如何降低虚拟化系统的安全风险?▪ 云中数据安全靠技术还是制度?▪ 云计算产业链全景图是怎样?▪ 向私有云过渡的步骤有哪些?
form2

C# code

form3 SSP = new form3();
SSP.okid = uid ;//此处SSP.okid 也得到值了
……
这个问题的关……
是同一个,但是始终得不得上一个窗体的值

作者: lone_boy   发布时间: 2011-12-15

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

作者: overset   发布时间: 2011-12-15

引用 5 楼 lone_boy 的回复:
public string okid = string.Empty;

把这个定义,换成,静态的
public static string okid = string.Empty;
这个之前试过 报错 Member 'okid' cannot be accessed with an instance reference; qualify it with a type name instead

作者: liao_ken   发布时间: 2011-12-15

第一点:
  在两个类之间传值,在.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()这个函数。

作者: overset   发布时间: 2011-12-15

引用 11 楼 gqmgsxz 的回复:
第一点:
在两个类之间传值,在.net里一般不直接使用public的变量。一搬传值都用属性。

form3

private string okid = string.Empty;

public string Okid
{
get
{
return okid;
}
set
{
okid = value;
}
……
我是在给okid付完值之后才调用的 Selectid()这个函数

作者: gqmgsxz   发布时间: 2011-12-15

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

作者: overset   发布时间: 2011-12-15

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

作者: Tsapi   发布时间: 2011-12-15

public string okid = string.Empty;

改成public static string okid=string.Empty

错误的根本原因是同一个类的对象不同,多看点什么是值类型,什么是引用类型

作者: bdstjk   发布时间: 2011-12-15

引用 2 楼 overset 的回复:
引用 1 楼 sdfkfkd 的回复:
关键是你这个SSP.okid = uid ;
uid此时到底是什么值?
uid的值是这么定义的 public string uid=string.Empty;

它是FORM2从FORM1得到的,在给SSP.okid = uid 的时候,uid有值。
你执行者一句的时候 调试跟进去 看看这个okid 有么有值

作者: helloadu2010   发布时间: 2011-12-15

该回复于2011-12-15 16:53:45被管理员删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
#18楼 得分:0回复于:2011-12-15 19:45:05
form1的值 传到form2中 可以再加载form2(load)的时候传 而不是再显示窗体的时候传

作者: yanbuodiao   发布时间: 2011-12-15

热门下载

更多