比如项目里有一个窗口和一个用户控件,
窗口和用户控件里都有一个Button,点击窗口里的Button怎么触发用户控件里Button的Click事件
如果你说的是 WinForm:
假定窗体上用户控件的名称为 userControl11,可在窗体的 button1_Click 事件方法中如下触发:
using System.Linq; namespace WindowsFormsApplication2 { public partial class Form1 : Form { private void button1_Click(object sender, EventArgs e) { var button = userControl11.Controls .OfType<Button>() //.Where(b=>b.Name == "btnXXXX") // 如果包含多个 Button,使用此行进行过滤。 .First(); button.PerformClick(); } //... }
如果你使用的 .net 版本低无法使用 Linq,可使用以下代码:
private void button1_Click(object sender, EventArgs e) { Button button = GetButtonFromUserControl(); if(button != null) button.PerformClick(); } private Button GetButtonFromUserControl() { foreach (Control control in userControl11.Controls) { Button button = control as Button; if (button == null) continue; //if (button.Name == "btnXXXXX") // 如果包含多个 Button,使用此行进行过滤。 return button; } return null; }
//WPF应用程序 //窗口.CS public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); contentControl1.Content = new UserControl1(); } private void 窗口Button_Click(object sender, RoutedEventArgs e) { //怎么触发 用户控件Button_Click } } //用户控件.CS public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); } private void 用户控件Button_Click(object sender, RoutedEventArgs e) { 用户控件Button.Content = "你好"; } }
可以这样:
private void 窗口Button_Click(object sender, RoutedEventArgs e) { var v = contentControl1.Content as UserControl; var b = v.FindName("用户控件Button") as Button; b.RaiseEvent( new RoutedEventArgs(e.RoutedEvent)); }
但我建议使用另一种方式,将 用户控件Button_Click 方法中的代码重构为一个 public 方法:
public partial class UserControl1 : UserControl { //... private void 用户控件Button_Click(object sender, RoutedEventArgs e) { DoSomethings(); } public void DoSomethings() { 用户控件Button.Content = "你好"; } }
窗口Button_Click 方法代码如下:
var v = contentControl1.Content as UserControl1; v.DoSomethings();
@鹤冲天: 要是反过来又怎么调用啊,点击用户控件Button改变窗口Button的Content
@不关你的事: 如果窗体上有个名为 okButton 的 Button,可如下调用:
private void 用户控件Button_Click(object sender, RoutedEventArgs e) { var w = Window.GetWindow(用户控件Button); // 获取当前窗体 var b = w.FindName("okButton") as Button; // 找到当前窗体上的 okButton b.RaiseEvent(new RoutedEventArgs(e.RoutedEvent)); }
@鹤冲天: 问题以解决,谢谢大神的指点
@鹤冲天: 请教一下C#
int[] a = { 1,2,3,4,5,6,7,8,9,0};
数组中任意8个数组合有多少种怎么算啊,
不能重复,如果要从小到大排列又怎么写
在窗体的button事件中直接调用用户控件的Button的click事件处理方法 就OK
你说的在ASP.NET程序吗?