挑战高分100分!

优途科技 2008-08-05 10:54:52
我的在Form上有一个boutton,当我点击他的时候会出来另外一个Form1。在Form1又有一个boutton1,当我点击form1上的boutton1时执行主窗体Form上的一个函数。请问有哪几种方式可以实现?参与有分!!!
...全文
159 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
优途科技 2008-08-05
  • 打赏
  • 举报
回复
谢谢各位。分数会给大家的,再看看是不是还有别的方式!
monstermonkey 2008-08-05
  • 打赏
  • 举报
回复
C# 中的委托类似于 C 或 C++ 中的函数指针。使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与 C 或 C++ 中的函数指针不同,委托是面向对象、类型安全的,并且是安全的。

bwangel 2008-08-05
  • 打赏
  • 举报
回复
在Form1中这样写:

public EventHander b1_Click;
void button1_Click(sender ,e)
{
b1_Click();
}

在主Form中这样写

Form1 form1 = new Form1();

form1.b1_Click += 你的主窗体要执行的函数名; //(eventhander那种格式的)

在做类似父子窗体这样的功能时,
我以为应该有两个原则是:
1.父窗体知道子窗体的存在,可以操作子窗体(产生,关闭等)
2.子窗体不知道父窗体的存在,不能操作父窗体的任何对像.

vacation_3_year 2008-08-05
  • 打赏
  • 举报
回复

MainForm
public void MainFormFunc()
{
}

private void button1_Click(object sender, EventArgs e)
{
SubForm f2 = new SubForm(this);
f2.Show();
}

SubForm
MainForm _parent;
public subForm(MainForm parent)
{
_parent=parent;
}

private void button1_Click(object sender, EventArgs e)
{
_parent.MainFormFunc();
}
ericzhangbo1982111 2008-08-05
  • 打赏
  • 举报
回复
凑合看吧。已经开了3个studio了
不想再开了。
差不多就那个意思

form
private void button1_Click(object sender, EventArgs e)
{
form1 f=new form1(this);
f.Show();

}
public void t1()
{
MessageBox.Show("form1");
}

form1

form f=null;
public form1(form f2)
{
f=f2;
}
private void button1_Click(object sender, EventArgs e)
{

f.t1();
}
我姓区不姓区 2008-08-05
  • 打赏
  • 举报
回复
构造函数,委托……
yangjian15 2008-08-05
  • 打赏
  • 举报
回复
只需要在form2上建一个form1的属性。
form1
public string getString()
{
return "hello world";
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.F1=this;
f2.Show();
}





form2
private Form1 f1;
public Form1 F1;
{ set F1=f1; }
private void button1_Click(object sender, EventArgs e)
{ f1.getString();
}

ericzhangbo1982111 2008-08-05
  • 打赏
  • 举报
回复
delegate
或者
把主窗体的对象传进去



form
private void button1_Click(object sender, EventArgs e)
{
form1 f=new form1();
f.t=new aaa(t1);

}
public void t1()
{
MessageBox.Show("form1");
}

form
public delegate void aaa();
public aaa t;
private void button1_Click(object sender, EventArgs e)
{

if(t!=null)
t();
}
Godshow 2008-08-05
  • 打赏
  • 举报
回复
Form1 f1 = new Form1();
f1.Show(this);

然后在f1的Button1_Click里,直接用Owner.Method()调用
zfwjh 2008-08-05
  • 打赏
  • 举报
回复
你把那函数设为公共的静态的方法。
然后在FROM1中调用时添加他所在的空间的引用就行。
家鸣 2008-08-05
  • 打赏
  • 举报
回复
用委托就可。
jacklygoodluck 2008-08-05
  • 打赏
  • 举报
回复
Form1类中添加一个属性,该属性为主窗体Form类型,将主窗体Form传给他就可以了
hongqi162 2008-08-05
  • 打赏
  • 举报
回复
form1没有被销毁


form1
public string getString()
{
return "hello world";
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2(this);
f2.Show();
}




form2
或者你重载form2的构造函数将form1传递过来
public Form2(Form1 f1)
{
InitializeComponent();
MessageBox.Show(f1.getString());
}
private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
MessageBox.Show(f1.getString());
}
优途科技 2008-08-05
  • 打赏
  • 举报
回复
3楼的算一种方式!还有其他方式吗?
优途科技 2008-08-05
  • 打赏
  • 举报
回复
补充下,当我点击button1时,form1不会销毁。
hongqi162 2008-08-05
  • 打赏
  • 举报
回复

form1
public string getString()
{
return "hello world";
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
}



form2
private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
MessageBox.Show(f1.getString());
}
jack20080808 2008-08-05
  • 打赏
  • 举报
回复
另外一个窗体类继承这个窗体类就可以了
优途科技 2008-08-05
  • 打赏
  • 举报
回复
补充下。点击button1时窗口不会销毁!

110,534

社区成员

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

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

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