none
C#关于委托事件中调用其他控件的问题... RRS feed

  • 问题

  • 一共有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
    2012年10月4日 6:18

答案

  • 针对你的问题,最简单的一个解决方法是使用

            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
    2012年10月8日 2:48

全部回复

  • 针对你的问题,最简单的一个解决方法是使用

            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
    2012年10月8日 2:48
  • 针对你的问题,最简单的一个解决方法是使用

            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

    非常感谢, 我用的方法太麻烦了, 原来还有这么实惠的办法~太感谢了!!

    2012年10月8日 15:52