关于WINFORM中窗体间传值的方法(只有思路,不会用代码实现)

msmvc 2006-04-10 04:52:36
这是我从别人一个项目中学到的
可惜只给了一个DLL让你调用,新建的窗体都是继承自这个DLL
他是这样实现的

Form1 f1 =new Form1();
f1.parameter["XXX"]="XXX";(字符串)
f1.show();

当在f1中使用这个值时这样接值
string s = type(me.parameter["XXX"],"string")
VB.NET的语法
我写的这几句可能有错误
但大意就是这样了
我后来看了一下这个DLL原来这个parameter是个hashtable

像他这种窗体间的传值的方法可以传个种类型的值

我的问题就是:这个父窗体应该怎么写,让继承他的窗体都能实现我说的这种方法来传值??



...全文
472 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
msmvc 2006-04-12
  • 打赏
  • 举报
回复
现在有form1 和 form2

form1 向form2中传值

form2中这样写
在声明处加上
private Hashtable parameter = new Hashtable();

再加个属性

public Hashtable Parameter
{
get{return parameter;}
set{parameter = value;}
}

form1中这样写

Form2 f2 = new Form2();
f2.Parameter.Add("A", "来自FORM1中的A");//可以是任意类型的数据
f2.Parameter.Add("B", "来自FORM1中的B");//在form2中接值时记得要类型转换
f2.Show();

form2中接值时

string s = parameter["A"].ToString();
MessageBox.Show(s);
string s = parameter["B"].ToString();
MessageBox.Show(s);

//最后把hashtable中的键值移除
parameter.Remove("A");
parameter.Remove("B");
effun 2006-04-11
  • 打赏
  • 举报
回复
这个应该不难吧。

public class ParameterForm : System.Windows.UI.Form
{
...
private System.Collection.Hastable _parameters = new System.Collection.Tashtable();

public System.Collection.Hastable Parameters
{
get { return _parameters; }
}
}
msmvc 2006-04-11
  • 打赏
  • 举报
回复
应该使用set/get 也能实现吧
msmvc 2006-04-11
  • 打赏
  • 举报
回复
我自己想到了一种方法
FORM1向FORM2中传值
在FORM2中声明一个Hashtable
在FORM2的构造方法中实例化
在FORM1中写入值

FORM2中
public Hashtable parameter = null;
public void form2()
{
parameter = new hashtable();
}
form1 中

form2 f2 = new form2();
f2.parameter.add("XXX", "XXX");
f2.show();

在FORM2中接值这样写
string s = this.parameter["XXX"].toString();
messagebox.show(s);

Knight94 2006-04-10
  • 打赏
  • 举报
回复

f1.parameter["XXX"]="XXX";
Knight94 2006-04-10
  • 打赏
  • 举报
回复
其实parameter只是Form1提供的一个属性,你自己也可以实现。例如:
public class clsParameters
{
ArrayList arrParameters;
public clsParameters()
{
arrParameters = new ArrayList();
}
public object this[int Index]
{
get{
if( i >=0 && i < arrParameters.Count )
return arrParameters[i];
else
throw new ApplicationException( "Invalid index" );
}
set{
if( i >=0 && i < arrParameters.Count )
arrParameters[i] = value;
else
throw new ApplicationException( "Invalid index" );
}
}
}

在你的Form1中,加入如下即可:
public clsParameters parameters = new clsParameters();

就可以用this.parameters[i]来访问了。
msmvc 2006-04-10
  • 打赏
  • 举报
回复
能不能用代码说明一下啊
dayasky 2006-04-10
  • 打赏
  • 举报
回复
Form1 f1 =new Form1();这句本身就生成了一个新对象

为什么不给它加些属性或者field来传值呢?
canserly 2006-04-10
  • 打赏
  • 举报
回复
好象一般的窗体都能这样做啊

110,500

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧