今天有人问:VS.NET怎么处理登陆窗体,我就说用 SHOWDIALOG,然后判断登陆窗体的公用变量,自己也随手写了一个 Form4 f=new Form4(); f.ss =0; f.ShowDialog(); System.Diagnostics.Trace.WriteLine(f.ss.ToString()); Form4 www.shengfang.org public int ss; private void Form4_Load(object sender, System.EventArgs e) { ss=0; www.shengfang.org } private void Form4_Closed(object sender, System.EventArgs e) { ss=423423; } 结果报错: www.shengfang.org Form1.cs(127): 无法将“WindowsApplication1.Form4.ss”作为 ref 或 out 传递,因为“WindowsApplication1.Form4.ss”是一个引用封送类 引用封送 引用封送对象是可远程处理的对象。对象远程处理适用于三种类型: 当跨 AppDomain 边界(在相同或不同的计算机上)封送时其实例被复制的类型。这些类型必须用 Serializable 属性标记。 当跨 AppDomain 边界(在相同或不同的计算机上)封送时运行库为其创建透明代理的类型。这些类型必须最终从 System.MarshalByRefObject 类派生。 根本不跨 AppDomain 封送的类型。这是默认类型。 使用引用封送时请遵循下面的指南: 默认情况下,实例应该是值封送对象。这意味着它们的类型应该标记为 Serializable。 组件类型应该是引用封送对象。大多数组件应该已经是这样,因为公共基类 System.Component 类是引用封送类。 如果类型封装操作系统资源,则它应该是引用封送对象。如果类型实现 IDisposable 接口,则它很可能必须通过引用封送。System.IO.Stream 从 MarshalByRefObject 派生。大多数流(如 FileStreams 和 NetworkStreams)封装外部资源,因此它们应该是引用封送对象。 只是保存状态的实例应该是值封送对象(如 DataSet)。 无法跨 AppDomain 调用的特殊类型(如静态工具方法的持有者)不应该标记为 Serializable。 Int32.ToString 方法 [C#]请参见 Int32 结构 | Int32 成员 | System 命名空间 | C++ 托管扩展编程 将此实例的数值转换为其等效的字符串表示。 看不出什么门道,改为 int sf=f.ss; www.shengfang.org System.Diagnostics.Trace.WriteLine(sf.ToString());就可以
或者form4 public int fdff() { return ss; } www.shengfang.org form1 System.Diagnostics.Trace.WriteLine(f.fdff().ToString()); 虽然用中文版本方便许多,开发也快一些,但是有些问题还是得有英文信息去GOOGLE搜索,中文信息搜索结果不多。 今天和同事说起农作物,他是农村的,我城市,说起我不认识,结果他说到路边长着花生,我记得以前有篇课文讲落花生,从地里刨出来,结果他一直说是上面挂着~~最后一搜索,呵呵,地上开花,地下结果。估计有人从地里翻出来,挂在上面~~~~~~~~ 字体:大 中 小 |