winform如何获取另一个窗体的实例

blueskyfly119 2014-03-09 10:30:40
从窗体A跳转到窗体B,在窗体B中如何获取A的实例呢?
把窗体A写成静态的,然后用单例模式来访问可以吗?
...全文
431 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
blueskyfly119 2014-03-11
  • 打赏
  • 举报
回复
大家的想法基本是一样的,我用的方法也基本是这个思路 我是创建了一个类staticVar,在类里创建一个静态的FormB,当窗体要从FormA跳转到FormB的时候,将FormA赋值给StaticVar中声明的静态FormA,这样跳转到FormB之后可以通过访问StaticVar来对FormA进行操作了。
threenewbee 2014-03-10
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/360140208
风中轻铃 2014-03-10
  • 打赏
  • 举报
回复
在A窗口生成B的代码段加入 Form_B B=new Form_B(); B.parent=this; 然后在B的代码段中加入 Form_A A=(Form_A)this.parent; A.treeView.//然后是你要添加 的节点什么的。 然后就可以了。
mnxm 2014-03-10
  • 打赏
  • 举报
回复

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2(this);
            f2.Show();
        }
    }
public partial class Form2 : Form
    {
        public Form2(Form1 f1)
        {
            InitializeComponent();
            this.textBox1.Text = f1.Controls["label1"].Text;
        }
    }
BenBenBears 2014-03-10
  • 打赏
  • 举报
回复
将窗体A中treeView传递给窗体B的构造函数(以便在加载B窗体的时候显示数据),在B添加节点的事件中找到A的实例并进行操作。自行google“窗体传值”。
blueskyfly119 2014-03-09
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
声明一个static的成员变量,不是一成不变的。比如当你了解了两个窗体的来龙去脉,你对那同时持有两个窗体的引用的宿主对象进行建模之后,可能就可以以另外一种灵活的通讯方式来沟通这两个窗体对象(例如设计出两三个事件通知接口并且管理它们的通讯实例)。 但是总之在你的这个问题中,“单例模式”是画蛇添足的。写一个static关键字可以一目了然地说清楚了你的设计需求了!而扯上什么雷人的“单例模式”这个词儿则会让真正了解单例模式的人反而对你产生相反的认识。 单例模式其实是纠结于不让一个class有外部可调用的.ctor实例化方法。就是纠结这么一点变态需求而已。
多谢多谢! 我的具体问题是这样的,窗体A中有一个treeView,然后跳转到B窗体,在B窗体中希望访问A窗体的treeView,并且在A窗体的treeView中添加节点,这个问题搞了两三天了还没搞定。
  • 打赏
  • 举报
回复
声明一个static的成员变量,不是一成不变的。比如当你了解了两个窗体的来龙去脉,你对那同时持有两个窗体的引用的宿主对象进行建模之后,可能就可以以另外一种灵活的通讯方式来沟通这两个窗体对象(例如设计出两三个事件通知接口并且管理它们的通讯实例)。 但是总之在你的这个问题中,“单例模式”是画蛇添足的。写一个static关键字可以一目了然地说清楚了你的设计需求了!而扯上什么雷人的“单例模式”这个词儿则会让真正了解单例模式的人反而对你产生相反的认识。 单例模式其实是纠结于不让一个class有外部可调用的.ctor实例化方法。就是纠结这么一点变态需求而已。
  • 打赏
  • 举报
回复
引用 3 楼 blueskyfly119 的回复:
那怎么解决这个问题呢,我想在B窗体中获得A窗体的实例。
按照你当前的问题,你只要声明
public static FormA FormA;
就行了,要即什么“单例模式”?
blueskyfly119 2014-03-09
  • 打赏
  • 举报
回复
引用 楼主 blueskyfly119 的回复:
从窗体A跳转到窗体B,在窗体B中如何获取A的实例呢? 把窗体A写成静态的,然后用单例模式来访问可以吗?
说错了,不是把类声明成静态类,是在构造函数里实例化,使用单例模式来访问这个类 那怎么解决这个问题呢,我想在B窗体中获得A窗体的实例。
  • 打赏
  • 举报
回复
窗体不可能声明为静态的,只可能在一个class里边声明一个静态成员 --> 窗体类型不可能声明为静态的,只可能在一个class里边为这个窗体类型的对象实例声明一个静态成员
  • 打赏
  • 举报
回复
窗体不可能声明为静态的,只可能在一个class里边声明一个静态成员,这个成员的类型是窗体A。 而既然将成员声明为静态的,还扯上什么“单例模式”干什么?单例模式是画蛇添足。

110,538

社区成员

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

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

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