日期:2014-05-18  浏览次数:20936 次

多窗口传值问题
有三个窗口:主窗口,查询窗口,查询集合窗口
主窗口点击查询弹出查询条件窗口,然后键入查询条件,按查询,查询窗口消失,
并将查询结果赋值给第三个窗口(查询集合窗口)
选取第三个查询记录中的记录来填充第一个窗口,同时关闭第三个窗口。
请问这类问题如何处理。

------解决方案--------------------
e.g.

一些事件参数:
public class QueryConditionChangedEventArgs : EventArgs
{
private string _someCondition;
  
public QueryConditionChangedEventArgs(string condition)
{
_someCondition = condition;
}

public string Condition
{
get{return _someCondition;}
}
}

public class QueryCollectionSelectedEventArgs : EventArgs
{
private string _seletedCondition;
 
public QueryCollectionSelectedEventArgs(string selected)
{
_selectedCondition = selected;
}

public string SelectedCondition
{
get{return _selectedCondition;}
}
}

一些事件委托:

public delegate void QueryConditionChangedEventHandler(object sender, QueryConditionChangedEventArgs e);

public delegate void QueryCollectionSelectedEventHandler(object sender, QueryCollectionSelectedEventArgs e);


然后, QueryForm Closing中:

public event QueryConditionChangedEventHandler OnQueryConditionChanged;
private string _yourCondition;

private void QueryForm_FormClosing(object sender, EventArgs e)
{
if(OnQueryCondtionChanged != null)
{
QueryConditionChangedEventArgs qce = new QueryConditionChangedEventArgs(_yourCondition);
OnQueryConditionChanged(this, qce);
}
}

MainForm中:

private void MainForm_Button1_Click(object sender, EventArgs e)
{
QueryForm qf = new QueryForm();
qf.OnQueryConditionChanged += new QueryConditionChangedEventHandler(foo);
qf.ShowDialog(this);
}

private void foo(object sender, QueryConditionChangedEventArgs e)
{
//feel free to handle the query condition by using e.Condition
}


其余类推