积极答复者
C#关于委托事件中调用其他控件的问题...

问题
-
一共有3个控件, 1个是本来就有的, 另外2个是new出来的 具体是这样子: 点击button1 就new一个grid和一个button2 , 然后把button2的visibility设置成Hidden添加到grid中 ,
给grid添加的鼠标经过事件 ,grid的事件是当鼠标经过这个grid的时候需要把button2的visibility设置成Visible
请问这个时候 怎么来调用button2呢 ?button2和grid都是在button1的点击事件中创建的, 在grid的事件里, 又没button2,
可以用grid事件的委托传参数吗? 或者其他的办法?
代码是这样子private void button1_Click(object sender, RoutedEventArgs e)
{
Grid grid = new Grid();
Button button2 = new Button();
button2.Visibility = Visibility.Hidden;
grid.Children.Add(button2);
grid.MouseEnter += new MouseEventHandler(grid_MouseEnter);
}
void grid_MouseEnter(object sender, MouseEventArgs e)
{
//在这个地方改变button2的Visibility属性
}- 已编辑 海星C 2012年10月4日 6:33
答案
-
针对你的问题,最简单的一个解决方法是使用
void g_MouseMove(object sender, System.Windows.Input.MouseEventArgs e) { Grid g = sender as Grid; Button b = g.Children[0] as Button; b.Visibility = System.Windows.Visibility.Visible; }
当然,通常情况下这种方法太过特定,所以,更合适的方法是使用FrameworkElement.FindName方法,这个方法需要你在创建控件时,注册控件名称,代码如下:
private void Add_Click(object sender, RoutedEventArgs e) { Grid g = new Grid(); Button b = new Button(); this.RegisterName("vb", b); // This is important! b.Content = "Hi"; b.Visibility = System.Windows.Visibility.Hidden; g.Children.Add(b); g.Background = new SolidColorBrush(Color.FromRgb(0, 128, 128)); g.MouseMove += new System.Windows.Input.MouseEventHandler(g_MouseMove); parent.Children.Add(g); Grid.SetRow(g, 0); Grid.SetColumn(g, 0); } void g_MouseMove(object sender, System.Windows.Input.MouseEventArgs e) { Grid g = sender as Grid; Button b = g.FindName("vb") as Button; b.Visibility = System.Windows.Visibility.Visible; }
Wanpeng wanpeng.ones@gmail.com
- 已标记为答案 海星C 2012年10月8日 15:52
全部回复
-
针对你的问题,最简单的一个解决方法是使用
void g_MouseMove(object sender, System.Windows.Input.MouseEventArgs e) { Grid g = sender as Grid; Button b = g.Children[0] as Button; b.Visibility = System.Windows.Visibility.Visible; }
当然,通常情况下这种方法太过特定,所以,更合适的方法是使用FrameworkElement.FindName方法,这个方法需要你在创建控件时,注册控件名称,代码如下:
private void Add_Click(object sender, RoutedEventArgs e) { Grid g = new Grid(); Button b = new Button(); this.RegisterName("vb", b); // This is important! b.Content = "Hi"; b.Visibility = System.Windows.Visibility.Hidden; g.Children.Add(b); g.Background = new SolidColorBrush(Color.FromRgb(0, 128, 128)); g.MouseMove += new System.Windows.Input.MouseEventHandler(g_MouseMove); parent.Children.Add(g); Grid.SetRow(g, 0); Grid.SetColumn(g, 0); } void g_MouseMove(object sender, System.Windows.Input.MouseEventArgs e) { Grid g = sender as Grid; Button b = g.FindName("vb") as Button; b.Visibility = System.Windows.Visibility.Visible; }
Wanpeng wanpeng.ones@gmail.com
- 已标记为答案 海星C 2012年10月8日 15:52
-
针对你的问题,最简单的一个解决方法是使用
void g_MouseMove(object sender, System.Windows.Input.MouseEventArgs e) { Grid g = sender as Grid; Button b = g.Children[0] as Button; b.Visibility = System.Windows.Visibility.Visible; }
当然,通常情况下这种方法太过特定,所以,更合适的方法是使用FrameworkElement.FindName方法,这个方法需要你在创建控件时,注册控件名称,代码如下:
private void Add_Click(object sender, RoutedEventArgs e) { Grid g = new Grid(); Button b = new Button(); this.RegisterName("vb", b); // This is important! b.Content = "Hi"; b.Visibility = System.Windows.Visibility.Hidden; g.Children.Add(b); g.Background = new SolidColorBrush(Color.FromRgb(0, 128, 128)); g.MouseMove += new System.Windows.Input.MouseEventHandler(g_MouseMove); parent.Children.Add(g); Grid.SetRow(g, 0); Grid.SetColumn(g, 0); } void g_MouseMove(object sender, System.Windows.Input.MouseEventArgs e) { Grid g = sender as Grid; Button b = g.FindName("vb") as Button; b.Visibility = System.Windows.Visibility.Visible; }
Wanpeng wanpeng.ones@gmail.com
非常感谢, 我用的方法太麻烦了, 原来还有这么实惠的办法~太感谢了!!