Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不知道如何写出鼠标。将鼠标悬停在if语句中_C#_Webforms - Fatal编程技术网

C# 不知道如何写出鼠标。将鼠标悬停在if语句中

C# 不知道如何写出鼠标。将鼠标悬停在if语句中,c#,webforms,C#,Webforms,我用iconName标记了一些标签,并使用foreach隐藏它们,效果很好。 现在我想运行一个if语句,这样当鼠标悬停在图标上时,iconName就会显示出来。但我不知道怎么写 private void MainForm_Load(object sender, EventArgs e) { foreach (Label iconName in this.Controls.OfType<Label>()

我用
iconName
标记了一些标签,并使用
foreach
隐藏它们,效果很好。 现在我想运行一个if语句,这样当鼠标悬停在图标上时,
iconName
就会显示出来。但我不知道怎么写

        private void MainForm_Load(object sender, EventArgs e)
        {

            
            foreach (Label iconName in this.Controls.OfType<Label>())
            {
                if (iconName.Visible)
                {
                    iconName.Hide(); // this works fine 
                }

                if (iconName.MouseHover += new EventHandler()) // This line I don't know how to make it work
                {
                   
                    iconName.Show(); 

                }

            }
        }

private void MainForm\u加载(对象发送方,事件参数e)
{
foreach(this.Controls.OfType()中的标签iconName)
{
如果(iconName.Visible)
{
iconName.Hide();//这很好用
}
if(iconName.MouseHover+=neweventhandler())//这一行我不知道如何使它工作
{
iconName.Show();
}
}
}

另外,我不明白突出显示的语法上的
+=
-=
?这是否意味着如果用户切换了鼠标右键,那么哪个鼠标按钮是正确的?

您可以使用

iconName.MouseHover += new EventHandler((object iconName, EventArgs e) => { 
    ((Label)iconName).Show(); 
});
但是,要将事件处理程序代码放入行中,这将不起作用,因为隐藏标签不会触发mouseover事件

如果你把标签放在面板(看不见的容器)里,那么你可以使用类似的东西

foreach (Panel p in this.Controls.OfType<Panel>())
{
    foreach (Label iconName in p.Controls.OfType<Label>())
    {
        iconName.Hide(); 
    }
    p.MouseHover += new EventHandler((object p, EventArgs e) => {
        foreach (Label iconName in ((Panel)p).Controls.OfType<Label>())
        {
            iconName.Show();
        }
    });
}
foreach(此.Controls.OfType()中的面板p)
{
foreach(p.Controls.OfType()中的标签iconName)
{
隐藏();
}
p、 MouseHover+=新的事件处理程序((对象p,事件参数e)=>{
foreach(在((Panel)p.Controls.OfType()中标记iconName)
{
iconName.Show();
}
});
}

我假设您希望标签在移出后消失,您需要向面板添加MouseLeave事件,以便在鼠标移出面板区域后再次隐藏标签

您的C#书是否没有讨论和解释事件处理程序以及如何使用它们?“如果”不是“什么时候”。呃<代码>鼠标悬停是一个事件,如果,您认为您试图用它检查什么?在Winforms中,您可以通过回调处理所有此类交互,不必循环检查。我没有C#book,我看了教程视频,但没有了解如何使用。第二部分我不明白,为什么我不能用if检查这个?我明白你的意思,这是一个事件,似乎是语言的另一部分,但是为什么我不能使用if来检查某个条件在C#中是否为真?例如,如果mouse.hover为真/假,C#无法判断?我觉得这很奇怪。。。