c#如何使用委托 触发另一个窗体的按钮刷新另一窗体

form1中有一个datagridview里面有数据
点击新增按钮打开form2,里面对数据进行添加等操作,想同时刷新form1的数据,怎么处理
form1中有刷新按钮,怎么触发或有其他处理方法

使用委托,在form1中声明委托,并定义委托函数,函数的其中一个参数是datagridview中的数据。在form2中注册这个委托,并把更新的数据通过委托函数传到form1中,这样就可以实时刷新了。追问

怎么委托,不是很明白,能写一些代码么?

追答

form1中的代码。
public delegate void test(形参1,...,DataSet ds);//声明委托

//定义委托函数
test (形参1,...,DataSet ds)
{
//各种处理。
把ds赋值给form1中的datagridview
}

form2中的代码。
public test test1;
把处理后的数据放在数据集ds中,然后可以直接用
test1(形参1,..., ds);调用即可。
具体的你可以去百度。
可以查
winform 窗体传值
http://wenku.baidu.com/view/2f240023482fb4daa58d4b7a.html
通过事件传值。
希望对你有帮助。打字太悲催了。呵呵

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-10
这是Form1的代码:
public partial class Form1 : Form
{
public delegate void myMethodDelegate();
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();

}
//假如这是你的刷新方法
public static void Button1_click()
{
MessageBox.Show("Form 1的button1被单击了");
}
}

这是Form2的代码:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Form1.myMethodDelegate dele = new Form1.myMethodDelegate(Form1.Button1_click);
dele.Invoke();
}
}

希望对你有帮助追问

Form1.myMethodDelegate dele = new Form1.myMethodDelegate(Form1.Button1_click);
我的程序里这里面的怎么Form1没有Button1_click

本回答被提问者和网友采纳
第2个回答  2012-07-07
在类外创建委托
public delegate void dlgRefresh(object sender, EventArgs e);
在form2中定义委托实例:
event dlgRefresh refEvent;
在form2的初始化时构造函数
public Form1(dlgRefresh e)
{
refEvent += e;
}
在form1中初始化form2时传入你说的那个刷新按钮的点击事件,假设这个事件为btnRefreshData_Click,那么就写:
Form2 newForm = new Form2(btnRefreshData_Click);
在你需要触发这个刷新事件的地方,就是你想刷新数据的时候,调用代码:
refEvent(null,null);
这样就能调用那个刷新按钮去刷新数据了
第3个回答  2015-05-18
这是Form1的代码:
public partial class Form1 : Form
{
public delegate void myMethodDelegate();
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();

}
//假如这是你的刷新方法
public static void Button1_click()
{
MessageBox.Show("Form 1的button1被单击了");
}
}

这是Form2的代码:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Form1.myMethodDelegate dele = new Form1.myMethodDelegate(Form1.Button1_click);
dele.Invoke();
}
}

希望对你有帮助
第4个回答  2012-07-06
打开之前设置form2的owner=form1
在form2的事件里写
form1 f1=(fomr1)this.owner;
f1.方法();//这个方法要是public的

c#如何单击按钮显示另一个窗体
1. 首先,启动Microsoft Visual Studio 2010,这是你的主要开发工具。2. 在工作区,找到你的项目,鼠标右键点击,从下拉菜单中选择“添加”选项,以便开始创建新的内容。3. 在“添加”对话框中,选择“Windows窗体”,这将生成一个新的窗体文件,用于你的程序。4. 在新创建的窗体上,找到左侧工具箱,...

VS里用C#实现点击一个按钮立即弹出另一个窗体
1、首先,打开VS2010后,新建一个项目。2、选择菜单和工具栏下的MenuStrip,将其拖入窗体中。3、然后可以将菜单的名称输入,双击下拉菜单中的打开第二窗体。4、在右边的解决方案中右击选择添加->Windows床头提(F)...5、选择生成->生成解决方案。6、点击运行。7、点击打开第二窗体。8、弹出第二窗体。

C#编程中怎么在一个窗体按下一个按钮调用另一个窗体的按钮的事件
先要得到你说的“另一个窗口”的句柄。比如A窗口有一个按钮butA,B窗口有一个按钮butB,你是想通过按butA时,调用butB的onclick事件是吧。在按下butA时候,创建一个窗口B,假如叫FormB formB = new FormB(); formB.butB.onclick();这样就可以调用了。

C#怎么让一窗体显示后激活另一个窗体的显示?
主窗体为Form1,Form2和Form3有Form1内部代码创建并显示且ShowInTaskBar = false 这样设置每次运行时任务栏只有一个图标,每次切换其他窗口(如浏览器之类的)会覆盖全部窗口,但是点击任务栏窗口的那个图标时,只会... 比如我有3个窗体Form1、Form2、Form3,其中主窗体为Form1,Form2和Form3有Form1内...

c#中如何实现调用另外一个窗体中的事件?
第一种办法:定义一个公共静态类 public static class Common 静态类中定义一个静态变量 public static form1 myform1;在form1 启动时,将自身对象赋值给公共静态类中的变量 Common.myform1= this;在form2调用form1时是这样Common.myform1.initial 第二种办法,假设form2由form1启动,在form2...

C#如何让鼠标停在一个窗体的时候弹出另一个窗体
moveover),在这个事件里面动态创建一个窗体(另一个窗体)并show之就行了。你试试吧,这样肯定是可以的,但是你得注意,窗体还有一个事件(moveleave),也就是离开窗体事件,在这个事件中退出你刚才创建的窗体,这样你的程序就不会导致创建了很多窗口而导致内存泄露等问题。

C#中一个窗体怎样对另外一个窗体操作,使窗体上的数据得到刷新?
你自己选择吧 同一进程中:1. A窗体中实例化B窗体,A中就可以直接操作B,不用多介绍了吧?2. 如果是B中实例化了A,那么就在A中定义一些事件。A触发事件,B订阅这些事件,从而修改数据。不同进程中:1. SendMessage ,这是通过Windows消息传递数据。2. NamePipe ,通过命名管道来实现数据传递。

C#中一个窗体控制另一个窗体的更新的代码?
可以将要更新窗体及更新变量方法设置为PUBLIC,在控制窗体里实例化可以设置

c# 怎么在一个窗体里刷新另一个已经打开的窗体里的控件内容?
this); f2.show();}from2事件下:在构造函数里修改以下代码public form2(form1 m){ f1 = m;InitializeComponent();}同时在窗体添加以下代码: private form1 f1;然后就可以在form2的Button事件下加入代码了{……f1.treeview1.DataSouce=}就可以更新form1下的控件内容了 ...

c# 我想在另一个窗体的closing事件里面改变另一个窗体的Enabled
private void ChangeFormEnable(Type frmType, bool enable){ foreach (Form frm in Application.OpenForms){ if (frm.GetType().Name == frmType.Name){ frm.Enabled = enable;} } } 调用方法:ChangeFormEnable(typeof(窗体类名), true);...

相似回答