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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
通过事件传值。
希望对你有帮助。打字太悲催了。呵呵

参考技术A 这是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

本回答被提问者和网友采纳
参考技术B 在类外创建委托
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);
这样就能调用那个刷新按钮去刷新数据了
参考技术C 这是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();



希望对你有帮助
参考技术D 打开之前设置form2的owner=form1
在form2的事件里写
form1 f1=(fomr1)this.owner;
f1.方法();//这个方法要是public的

C#如何在 Windows 窗体应用程序中使用事件

参考技术A 例如,当用户在窗体中单击 Button 控件时,该控件会引发一个事件。通过处理该事件,应用程序可以针对该按钮单击操作执行适当的应用程序逻辑。有关Windows 窗体的更多信息,请参见 Windows 窗体入门。处理Windows 窗体上的按钮单击事件1.创建一个具有 Button 控件的 Windows 窗体。private Button button; 2.定义一个与 Click 事件委托签名匹配的事件处理程序。Click 事件为该委托类型使用 EventHandler 类,而为该事件数据使用 EventArgs 类。 void Button_Click(object sender, EventArgs e)
... 3.将事件处理程序方法添加到 Button 的Click 事件。 button.Click +=new EventHandler(this.Button_Click);注意设计器(如 Visual Studio 2005)将通过生成与下面的示例中的代码类似的代码来为您执行此事件连接。示例下面的代码示例处理 Button 的Click 事件以改变 TextBox 的背景色。以粗体表示的元素显示了该事件处理程序以及它如何连结到 Button 的Click 事件。此示例中的代码不是使用可视设计器(例如 Visual Studio 2005)编写的,并且只包含基本的编程元素。如果您使用设计器,它将生成附加代码。using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing;
publicclass MyForm : Formprivate TextBox box;
private Button button;
public MyForm() : base()box =new TextBox();
box.BackColor = System.Drawing.Color.Cyan;
box.Size =new Size(100,100);
box.Location =new Point(50,50);
box.Text ="Hello";
button =new Button();
button.Location =new Point(50,100);
button.Text ="Click Me";
// To wire the event, create
// a delegate instance and add it to the Click event. button.Click +=new EventHandler(this.Button_Click);
Controls.Add(box);
Controls.Add(button);// The event handler.privatevoid Button_Click(object sender, EventArgs e)box.BackColor = System.Drawing.Color.Green;// The STAThreadAttribute indicates that Windows Forms uses the
// single-threaded apartment model. [STAThreadAttribute]
publicstaticvoid Main(string[] args)Application.Run(new MyForm());编译代码将上面的代码保存到一个文件(对于 C# 文件,扩展名为 .cs,对于 Visual Basic 2005,扩展名为 .vb)中,进行编译,然后执行。例如,如果源文件名为 WinEvents.cs(或 WinEvents.vb),请执行下面的命令。

以上是关于c#如何使用委托 触发另一个窗体的按钮刷新另一窗体的主要内容,如果未能解决你的问题,请参考以下文章

winform怎么获取另一窗体的控件

c#如何单击按钮显示另一个窗体

C# 刷新另一个窗体的listview

VS里用C#如何实现点击一个按钮立即弹出另一个窗体?

C#怎样在一个窗体上执行另一个窗体的按钮,不能用new啊!

C#中关闭子窗口的同时刷新父窗口的办法?