【问题标题】:How do i make my Mouse over(hover)and on click events while the program is running如何在程序运行时让我的鼠标悬停(悬停)和点击事件
【发布时间】:2017-11-15 17:33:08
【问题描述】:

我已经制作了一个程序,您可以在其中询问省略号的数量,并在 c# 中将它们显示在不同的窗口中,但我想要鼠标悬停效果 - 我理解它被称为:MouseEnter 和 onclick 事件,我理解称为 MouseDown,但我做了一个省略号数组并尝试了以下操作:

namespace WpfApp1
{
/// <summary>
/// Interaction logic for Window2.xaml
/// </summary>
public partial class Window2 : Window
{
    int numOfElipses;
    public Window2()
    {
        InitializeComponent();
        numOfElipses= MainWindow.numOfElipse;
        Ellipse[] ellipsePoints = new Ellipse[numOfElipses];
        Random rnd = new Random();
        for (int i=0;i<numOfElipses; i++)
        {
            SolidColorBrush brush =
                                new SolidColorBrush(
                                    Color.FromRgb(
                                    (byte)rnd.Next(255),
                                    (byte)rnd.Next(255),
                                    (byte)rnd.Next(255)
                                    ));
            var top = rnd.Next(0, 280);
            var left = rnd.Next(0, 450);
            ellipsePoints[i] = new Ellipse();
            ellipsePoints[i].Width = 40;
            ellipsePoints[i].Height = 40;
            Canvas.SetTop(ellipsePoints[i], i);
            Canvas.SetLeft(ellipsePoints[i], i*45);
            ellipsePoints[i].Fill = brush;
            c1.Children.Add(ellipsePoints[i]);
        }
    }
    private void E1_MouseEnter(object sender, MouseEventArgs e)
    {
        Random r = new Random();
        Ellipse ellipsePoints = (Ellipse)sender;
        ellipsePoints.Fill = new 
        SolidColorBrush(Color.FromRgb((byte)r.Next(255), (byte)r.Next(255), 
        (byte)r.Next(255)));
    }
    private void E1_MouseDown(object sender, MouseButtonEventArgs e)
    {
        c1.Children.Remove((Ellipse)sender);
    }

}
}

但它不起作用。谁能解释为什么以及如何让它在鼠标悬停(悬停)时随机改变颜色,并在鼠标点击时消失/被删除? 非常感谢任何帮助!

【问题讨论】:

  • 不起作用有点不清楚。当您尝试运行此程序时会发生什么?
  • 你真的把事件联系起来了吗?仅仅创建方法不会做任何事情。
  • 当我尝试运行它时,我可以看到不同(随机)颜色的椭圆,就像我在循环中所做的那样,但是每当我将鼠标悬停在其中一个椭圆上或单击它们时,什么都没有发生。所以循环并且一切正常,只是事件没有。也许它无法识别我当前所在的对象,尽管我认为发件人应该负责处理。
  • 连接事件是什么意思?我是初学者,所以我对 c# 了解不多。

标签: c# arrays onclick mouseevent mouseover


【解决方案1】:

如 cmets 中所述,您实际上需要将事件连接到您正在创建的椭圆:

...
ellipsePoints[i].MouseEnter += E1_MouseEnter;    // "hook up" the Mouse Enter event
ellipsePoints[i].MouseDown += E1_MouseDown;      // "hook up" the Mouse Down event
c1.Children.Add(ellipsePoints[i]);
...

简单地创建E1_MouseEnterE1_MouseDown 方法不会自动将它们连接起来,当我们考虑它时,这是有道理的。 Window 上可能有任意数量的具有这些事件的对象 - 代码应该如何知道应该听谁?

【讨论】:

    猜你喜欢
    • 2011-03-23
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    相关资源
    最近更新 更多