一个窗体为主窗体A(不是MDI),他需要弹出另一个窗体B,
中间的无关操作略。。
根据A传递的参数会使B得到N个checkbox
我想勾选checkbox后,将勾选过的(比如10个,其中3个我进行了勾选)索引存到了一个数组里
问:怎么将B的数组传回A另:因为A是主窗体,所以A可以
窗体名 变量名= new 窗体名();
变量名。我定义的变量名;
这样进行操作,但B无法这样写给分及时,请高手解答
如果哪里没看明白,我会详细解释下或者联系我QQ:283558165
中间的无关操作略。。
根据A传递的参数会使B得到N个checkbox
我想勾选checkbox后,将勾选过的(比如10个,其中3个我进行了勾选)索引存到了一个数组里
问:怎么将B的数组传回A另:因为A是主窗体,所以A可以
窗体名 变量名= new 窗体名();
变量名。我定义的变量名;
这样进行操作,但B无法这样写给分及时,请高手解答
如果哪里没看明白,我会详细解释下或者联系我QQ:283558165
解决方案 »
- 跪求百度,淘宝那种自动匹配(模糊查询)(jquery实现)
- winform中怎么调用shellexecute,急!!!
- 关于SQL 2005数据库存取数据的问题。
- 使用代码添加一个简单的窗体
- 有条件查询excel表格的问题!where
- 如何把datatable.select()返回的[]byte数组显示到DataGridView里?
- 批号的改变的问题。
- 菜鸟求助关于C#的引用问题?
- C#调用webservice问题
- 在C#里如何调用普通的com组件
- C#中的抽象类一定要含有抽象方法吗??很多资料上说必须有,可下面这个例子怎么没有,而且调试正常!!救就兄弟吧!刚刚入门
- 求DevExpress XtraBars教程
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
using (Form2 frm = new Form2())
{
if (frm.ShowDialog() == DialogResult.OK)
{
int[] i = frm.RetValue;
Console.WriteLine(i.ToString());
}
}
}
}
public Form2()
{
InitializeComponent();
this.DialogResult = DialogResult.Cancel;
} public int[] RetValue ={ 1, 2, 3 }; private void button1_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
}
网络上有几种方法,先总结如下:
调用窗体(父):Form1,被调用窗体(子):Form2
方法1: 所有权法
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//在调用Form2时,要把Form2的所有者设为Form1
Form2 f2 = new Form2() ;
f2.Owner = this;
f2.ShowDialog() ;
//Form2:
//在需要对其调用者(父)刷新时
Form1 f1 ;
f1 = (Form1)this.Owner;
f1.Refresh_Method() ;
方法2:自身传递法
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
Form2 f2 = new Form2() ;
f2.ShowDialog(this) ;
//Form2:
private Form1 p_f1;
public Form2(Form1 f1)
{
InitializeComponent();
p_f1 = f1;
}
//刷新时
p_f1.Refresh_Method() ;
方法3:属性法
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//调用时
Form2 f2 = new Form2() ;
f2.P_F1 = this;
f2.Show() ; //Form2:
private Form1 p_f1;
public Form1 P_F1
{
get{return p_f1;}
set{p_f1 = value;}
}
//刷新时
p_f1.Refresh_Method() ;
方法4:委托法
//声明一个委托
public delegate void DisplayUpdate();
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//调用时
Form2 f2 = new Form2() ;
f2.ShowUpdate += new DisplayUpdate(Refresh_Method) ;
f2.Show() ;
//Form2:
//声明事件
public event DisplayUpdate ShowUpdate;
//刷新时,放在需要执行刷新的事件里
ShowUpdate();
在窗体B中将你选取的3个值赋值给i[0],i[1],1[2];
在A中使用时用FormB.i[0]即可。
delegate void CheckListDoneHandler(object sender, bool[] checkstates); class FormA : Form
{
void ShowFormB()
{
formB.OnCheckListDone += this.onCheckListDone;
formB.Show();
}
void onCheckListDone(object sender, bool[] checkstates)
{
//
// update according to checkstates
//
}
FormB formB = new FormB();
}
public class FormB : Form
{
public event CheckListDoneHandler OnCheckListDone; //用于通知订阅的窗口,清单已经准备好了。
void NotifyFormA()
{
if (OnCheckListDone != null)
{
bool[] checkstates = GetCheckBoxesState();
OnCheckListDone(this, checkstates);
}
}
}
string[] var=new string[count];
Form frm=new 窗体B(var);
frm.ShowDialog();在窗体B中:
private string[] _var;
public 窗体B(string[] var)
{
_var=var; //_var已指向var
}
然后在窗体B中随意读写 _var[0]..., 关闭B
回到窗体A中,直接读写var[0]...就可以了
B b=new B();
b.Tag=你的数组;
b.show();B里访问Tag属性就行了 它是object类型 要转换。A不是传的个数吗?有必要用数组吗?
A.ob设置或获取
加学习!~看了上面的答案,个人用二楼的方法比较好!用静态类实现应该是有问题的,因为你传值回父form的话,是需要动态传,而static成员在编译运行的时候是不允许随便赋值的吧!