如何调用别的窗体的方法

瑟荻
博客专家认证
2014-12-09 08:06:53
假设我有两个窗体,formA和formB,formA中有一个按钮,点击这个按钮会产生一个文件路径变量a,然后我希望点击这个按钮后就可调用formB中的一个openfile()方法打开这个文件路径。我希望是用当前的formB来打开文件,而不是重新new 一个。
不知道,有没有人做类似的功能,我试过委托,但我发觉我不能把事件注册。
...全文
205 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
exception92 2014-12-11
  • 打赏
  • 举报
回复
枫0子K 2014-12-11
  • 打赏
  • 举报
回复
引用 10 楼 neal1991 的回复:
我的form1其实是别的地方new的,这两个form不是从属关系,是并列关系,他们两个被放在一个tabcontrol里面
自己弄个消息机制吧。 你这逻辑要想清楚,我不知道你,你不知道我,然后我想要向一个虚无(我并不知道你)的你发消息。这想想就有问题。 除非是有一个中间人,我告诉中间人我的什么什么改变了,中间人再去告诉你让你去改变。
枫0子K 2014-12-10
  • 打赏
  • 举报
回复
引用 8 楼 neal1991 的回复:
这个GotFile只是经过了初始化,它肯定是空的啊
。。。CSDN如果能添加Demo就好了。大家都带你到门口了~ 再来吧:

//下面代码写在FormA里面
public event EventHandler<GotFileEventArgs> GotFile;
public class GotFileEventArgs : EventArgs {
    public string FilePath
    {
        get;
        set;
    }
}
private void OnGotFile(GotFileEventArgs e) {
    if (null != GotFile) {
        GotFile(this, e);
    }
}

// 这段代码放在FormB的初始化里面(或者放在能访问到FormA的地方)...
// 这段代码执行完FormA里面的GotFile就不是空了。
Form1 form = new Form1();
form.GotFile += form_GotFile;

// 这里放在FormB里面,从参数e里面就能得到文件路径了
private void form_GotFile(object sender, Form1.GotFileEventArgs e)
{
    MessageBox.Show(e.FilePath);
}
瑟荻 2014-12-10
  • 打赏
  • 举报
回复
引用 2 楼 Yokeqi 的回复:
再来一个触发事件的函数,这个当点击按钮生成文件路径的时候就调用这个方法。

private void OnGotFile(GotFileEventArgs e) {
    if (null != GotFile) {
        GotFile(this, e);
    }
}
这个GotFile只是经过了初始化,它肯定是空的啊
失落的神庙 2014-12-10
  • 打赏
  • 举报
回复
委托。
瑟荻 2014-12-10
  • 打赏
  • 举报
回复
引用 1 楼 Yokeqi 的回复:
关联关系? 1. FormA中得到FormB的实例,FormA按钮按下时得到一个文件路径,并调用FormB实例中的OpenFile方法。 2. FormB知道FormA,但FormA不知道FormB。在FormA中公开一个事件如GotFilePath,参数就是文件路径,然后FormB就像FormA注册这个事件,在中调用this.OpenFile方法。 我送佛送到低:

//这个是事件
public event EventHandler<GotFileEventArgs> GotFile;
public class GotFileEventArgs : EventArgs {
    public string FilePath
    {
        get;
        set;
    }
}
// 像FormA注册事件
Form1 form = new Form1();
form.GotFile += form_GotFile;
// 这是事件里面
private void form_GotFile(object sender, Form1.GotFileEventArgs e)
{
    MessageBox.Show(e.FilePath);
}
这个是放在哪呢,是放在formB的初始化里面么,不好意思啊
瑟荻 2014-12-10
  • 打赏
  • 举报
回复
引用 1 楼 Yokeqi 的回复:
关联关系? 1. FormA中得到FormB的实例,FormA按钮按下时得到一个文件路径,并调用FormB实例中的OpenFile方法。 2. FormB知道FormA,但FormA不知道FormB。在FormA中公开一个事件如GotFilePath,参数就是文件路径,然后FormB就像FormA注册这个事件,在中调用this.OpenFile方法。 我送佛送到低:

//这个是事件
public event EventHandler<GotFileEventArgs> GotFile;
public class GotFileEventArgs : EventArgs {
    public string FilePath
    {
        get;
        set;
    }
}
// 像FormA注册事件
Form1 form = new Form1();
form.GotFile += form_GotFile;
// 这是事件里面
private void form_GotFile(object sender, Form1.GotFileEventArgs e)
{
    MessageBox.Show(e.FilePath);
}
所以这个是在formB里面初始化事件?当formA点击按钮后,就会触发这个事件,然后formB就能获得这个事件并处理,是这个意思么
瑟荻 2014-12-10
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
参考我的帖子: http://bbs.csdn.net/topics/360140208
你的帖子我看过,但是那个事件的注册, if(TextBoxChanged != null) TextBoxChanged(this,e); 我不明白这个事件初始化的时候就是null啊,然后直接就跳走了,但我看你的是有事件的。
瑟荻 2014-12-10
  • 打赏
  • 举报
回复
引用 9 楼 Yokeqi 的回复:
[quote=引用 8 楼 neal1991 的回复:] 这个GotFile只是经过了初始化,它肯定是空的啊
。。。CSDN如果能添加Demo就好了。大家都带你到门口了~ 再来吧:

//下面代码写在FormA里面
public event EventHandler<GotFileEventArgs> GotFile;
public class GotFileEventArgs : EventArgs {
    public string FilePath
    {
        get;
        set;
    }
}
private void OnGotFile(GotFileEventArgs e) {
    if (null != GotFile) {
        GotFile(this, e);
    }
}

// 这段代码放在FormB的初始化里面(或者放在能访问到FormA的地方)...
// 这段代码执行完FormA里面的GotFile就不是空了。
Form1 form = new Form1();
form.GotFile += form_GotFile;

// 这里放在FormB里面,从参数e里面就能得到文件路径了
private void form_GotFile(object sender, Form1.GotFileEventArgs e)
{
    MessageBox.Show(e.FilePath);
}
[/quote] 我的form1其实是别的地方new的,这两个form不是从属关系,是并列关系,他们两个被放在一个tabcontrol里面
threenewbee 2014-12-09
  • 打赏
  • 举报
回复
参考我的帖子: http://bbs.csdn.net/topics/360140208
枫0子K 2014-12-09
  • 打赏
  • 举报
回复
再来一个触发事件的函数,这个当点击按钮生成文件路径的时候就调用这个方法。

private void OnGotFile(GotFileEventArgs e) {
    if (null != GotFile) {
        GotFile(this, e);
    }
}
枫0子K 2014-12-09
  • 打赏
  • 举报
回复
关联关系? 1. FormA中得到FormB的实例,FormA按钮按下时得到一个文件路径,并调用FormB实例中的OpenFile方法。 2. FormB知道FormA,但FormA不知道FormB。在FormA中公开一个事件如GotFilePath,参数就是文件路径,然后FormB就像FormA注册这个事件,在中调用this.OpenFile方法。 我送佛送到低:

//这个是事件
public event EventHandler<GotFileEventArgs> GotFile;
public class GotFileEventArgs : EventArgs {
    public string FilePath
    {
        get;
        set;
    }
}
// 像FormA注册事件
Form1 form = new Form1();
form.GotFile += form_GotFile;
// 这是事件里面
private void form_GotFile(object sender, Form1.GotFileEventArgs e)
{
    MessageBox.Show(e.FilePath);
}

110,529

社区成员

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

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

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