C#跨项目传递窗体参数
方案中有两个项目:A、B项目A中有个窗体:frmMain项目B中有个窗体:frmTest在项目A中引用项目B:在A.frmMain中执行函数显示B.frmTest:B.f...
方案中有两个项目:A、B
项目A中有个窗体:frmMain
项目B中有个窗体:frmTest
在项目A中引用项目B:
在A.frmMain中执行函数显示B.frmTest:
B.frmTest test = new B.frmTest();
test.Show();
因为项目A中已经应用了项目B,所以项目B中不能再引用项目A了:
那么请问在B.frmTest中如何执行A.frmMain中的函数呢? 希望前辈们能给个详细的代码,万分感谢。
我试过委托,但没做出来效果,可能方法不对,烦请给个具体的代码,感谢! 展开
项目A中有个窗体:frmMain
项目B中有个窗体:frmTest
在项目A中引用项目B:
在A.frmMain中执行函数显示B.frmTest:
B.frmTest test = new B.frmTest();
test.Show();
因为项目A中已经应用了项目B,所以项目B中不能再引用项目A了:
那么请问在B.frmTest中如何执行A.frmMain中的函数呢? 希望前辈们能给个详细的代码,万分感谢。
我试过委托,但没做出来效果,可能方法不对,烦请给个具体的代码,感谢! 展开
7个回答
展开全部
[项目B]
namespace B
{
public partial class frmTest : Form
{
public delegate string TestDelegate(string p);
public event TestDelegate TestEvent;
public frmTest()
{
InitializeComponent();
}
private void frmTest_Load(object sender, EventArgs e)
{
if (this.TestEvent != null)
{
this.TestEvent("传参数到项目A的frmMain的方法中");
}
}
}
}
[项目A]
namespace A
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}
private void frmMain_Load(object sender, EventArgs e)
{
B.frmTest test = new B.frmTest();
test.TestEvent+=new B.frmTest.TestDelegate(test_TestEvent);
test.Show();
}
/// <summary>
/// 处理方法(frmMain的frmTest都可以调用该方法)
/// </summary>
/// <param name="p"></param>
/// <returns></returns>
private string test_TestEvent(string p)
{
return p;
}
}
}
namespace B
{
public partial class frmTest : Form
{
public delegate string TestDelegate(string p);
public event TestDelegate TestEvent;
public frmTest()
{
InitializeComponent();
}
private void frmTest_Load(object sender, EventArgs e)
{
if (this.TestEvent != null)
{
this.TestEvent("传参数到项目A的frmMain的方法中");
}
}
}
}
[项目A]
namespace A
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}
private void frmMain_Load(object sender, EventArgs e)
{
B.frmTest test = new B.frmTest();
test.TestEvent+=new B.frmTest.TestDelegate(test_TestEvent);
test.Show();
}
/// <summary>
/// 处理方法(frmMain的frmTest都可以调用该方法)
/// </summary>
/// <param name="p"></param>
/// <returns></returns>
private string test_TestEvent(string p)
{
return p;
}
}
}
展开全部
如果出现了可能会导致项目循环引用的问题,就要考虑你的项目设计是否合理了,一般是功能划分不够合理,建议重构。
如果需要临时处理,那么最简单的……可能就是用委托了。
B中定义委托的变量:
public Action DoAction;
在A中,显示B的窗体之前,绑定B的那个委托到自己的函数上:
A.SomeClass.DoAction=new Action(处理函数);
在B中,则使用 DoAction() 来直接调用。
如果需要临时处理,那么最简单的……可能就是用委托了。
B中定义委托的变量:
public Action DoAction;
在A中,显示B的窗体之前,绑定B的那个委托到自己的函数上:
A.SomeClass.DoAction=new Action(处理函数);
在B中,则使用 DoAction() 来直接调用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以在b的frmTest里公开一个事件,如:
public event EventHandler SomeEvent;(委托的类型看你自己的需要)
然后在A的frmMain里创建了frmTest后,注册这个事件:
B.frmTest test = new B.frmTest();
test.SomeEvent += SomeMethodInfrmMain;
test.Show();
在B里适当地方使用这个事件,就可以访问A的方法了。
public event EventHandler SomeEvent;(委托的类型看你自己的需要)
然后在A的frmMain里创建了frmTest后,注册这个事件:
B.frmTest test = new B.frmTest();
test.SomeEvent += SomeMethodInfrmMain;
test.Show();
在B里适当地方使用这个事件,就可以访问A的方法了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果非要按你说的方法去实现的话,就需要用代理或者事件去做。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
[项目B]
namespace
B
{
public
partial
class
frmTest
:
Form
{
public
delegate
string
TestDelegate(string
p);
public
event
TestDelegate
TestEvent;
public
frmTest()
{
InitializeComponent();
}
private
void
frmTest_Load(object
sender,
EventArgs
e)
{
if
(this.TestEvent
!=
null)
{
this.TestEvent("传参数到项目A的frmMain的方法中");
}
}
}
}
[项目A]
namespace
A
{
public
partial
class
frmMain
:
Form
{
public
frmMain()
{
InitializeComponent();
}
private
void
frmMain_Load(object
sender,
EventArgs
e)
{
B.frmTest
test
=
new
B.frmTest();
test.TestEvent+=new
B.frmTest.TestDelegate(test_TestEvent);
test.Show();
}
///
<summary>
///
处理方法(frmMain的frmTest都可以调用该方法)
///
</summary>
///
<param
name="p"></param>
///
<returns></returns>
private
string
test_TestEvent(string
p)
{
return
p;
}
}
}
namespace
B
{
public
partial
class
frmTest
:
Form
{
public
delegate
string
TestDelegate(string
p);
public
event
TestDelegate
TestEvent;
public
frmTest()
{
InitializeComponent();
}
private
void
frmTest_Load(object
sender,
EventArgs
e)
{
if
(this.TestEvent
!=
null)
{
this.TestEvent("传参数到项目A的frmMain的方法中");
}
}
}
}
[项目A]
namespace
A
{
public
partial
class
frmMain
:
Form
{
public
frmMain()
{
InitializeComponent();
}
private
void
frmMain_Load(object
sender,
EventArgs
e)
{
B.frmTest
test
=
new
B.frmTest();
test.TestEvent+=new
B.frmTest.TestDelegate(test_TestEvent);
test.Show();
}
///
<summary>
///
处理方法(frmMain的frmTest都可以调用该方法)
///
</summary>
///
<param
name="p"></param>
///
<returns></returns>
private
string
test_TestEvent(string
p)
{
return
p;
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
简单,给form3加两个属性就行了
//在form1与form3中定义:
private
int
_intvala;
private
int
_intvalb;
public
int
intvala
{
get{return
this._intvala;}
set{this._intvala
=
value;}
}
public
int
intvalb
{
get{return
this._intvalb;}
set{this._intvalb
=
value;}
}
//在form1中调用form2
form2
form2
=
new
form2();
bool
diaresult
=
form2.showdialog();
//在form1中调用form3
form3
form3
=
new
form3();
if(diaresult
==
dialogresult.ok)
{
form3.intvala
=
this._intvala;
form3.intvalb
=
this._intvalb;
}
form3.show();
//在form2中:
//假设你这里有一个确认按钮,该按钮的作用是提交你的参数设置
private
void
button1_click(object
sender,
eventargs
e)
{
form1
form1
=
new
form1();
form1.intvala
=
100;
form1.intvalb
=
200;
this.dialogresult
=
ok;
}
//窗口关闭事件中
private
void
form1_closed(object
sender,
eventargs
e)
{
this.dialogresult
=
none;
}
//在form1与form3中定义:
private
int
_intvala;
private
int
_intvalb;
public
int
intvala
{
get{return
this._intvala;}
set{this._intvala
=
value;}
}
public
int
intvalb
{
get{return
this._intvalb;}
set{this._intvalb
=
value;}
}
//在form1中调用form2
form2
form2
=
new
form2();
bool
diaresult
=
form2.showdialog();
//在form1中调用form3
form3
form3
=
new
form3();
if(diaresult
==
dialogresult.ok)
{
form3.intvala
=
this._intvala;
form3.intvalb
=
this._intvalb;
}
form3.show();
//在form2中:
//假设你这里有一个确认按钮,该按钮的作用是提交你的参数设置
private
void
button1_click(object
sender,
eventargs
e)
{
form1
form1
=
new
form1();
form1.intvala
=
100;
form1.intvalb
=
200;
this.dialogresult
=
ok;
}
//窗口关闭事件中
private
void
form1_closed(object
sender,
eventargs
e)
{
this.dialogresult
=
none;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用委托做!
到网上可以找到委托例程
通讯线程中的协议解析就是委托做的
到网上可以找到委托例程
通讯线程中的协议解析就是委托做的
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询