A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 mzh901024 于 2013-7-21 22:09 编辑

我在做C/S模式时遇到了这个问题,在同一解决方案下,有两个项目,比如A项目,B项目,我是要实现窗体传值,A项目中有个窗体a,B项目中有个窗体b,首先是项目A引用了项目B,我在启动程序弹出窗体a的时候,单击a中某个按钮,会弹出窗体b,此时窗体a在窗体b弹出时并没有关闭,然后我提取窗体b中我所需要的数据后,单击b窗体中的某个按钮,关闭窗体b,在关闭b窗体的同时,将自己获得的数据显示在a窗体的某个控件上,我的前提是a窗体自始至终未关闭,当时我做的时候用到窗体a的再次激活事件,但没用,我在b中再new a的时候,就会出现循环依赖问题,不知这问题有没有好的解决方法

评分

参与人数 1技术分 +1 收起 理由
zhangcheng5468 + 1 赞一个!

查看全部评分

4 个回复

正序浏览
采用策略模式+单例   保证类数据的单一性就可以了
减少new的原则  本来就一个窗口 多new就不能实现交互原则了
本来张三是个窗口..结果你在new个张三..虽然都一样..
但是此张三只是长的跟张三一样的名字..数据区别可大了.
B  b=new b(this);
把自已传过去就行了.
对面 b下面的a类如果==null就接收本身就可以了..
回复 使用道具 举报
本帖最后由 gb2312_8 于 2013-7-19 09:28 编辑
  1. 我没写关闭b窗口,有一个问题,传的值有System.Windows.Forms.TextBox, Text: ,,,期待高手解答
复制代码
粗心大意,b页面的textbox取值时,忘记text属性,直接tostring赋值了,以修改
回复 使用道具 举报
本帖最后由 gb2312_8 于 2013-7-19 09:26 编辑

可以用委托 事件来实现。。
在b项目声明委托,一个button,一个textbook,代码如下:
  1. public delegate void test8Delegate(string str);
  2. public event test8Delegate testEvent;

  3. private void button1_Click(object sender, EventArgs e)
  4.         {
  5.             if (this.testEvent != null)
  6.             {
  7.                 string t = txtString.Text.ToString();
  8.                 this.testEvent(t);
  9.             }
  10.         }
复制代码
A项目页面,一个button ,一个textbox ,代码如下:
  1. private void button1_Click(object sender, EventArgs e)
  2.         {
  3.             test8.Form1 test = new test8.Form1();
  4.             test.testEvent+=new test8.Form1.test8Delegate(test_testEvent);
  5.             test.Show();
  6.         }
  7.         private void test_testEvent(string p)
  8.         {
  9.             textBox1.Text = p;
  10.         }
复制代码
回复 使用道具 举报
可以用委托和事件来做
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马