C# 按钮';s FlatStyle在悬停时为系统,但在单击时为标准

C# 按钮';s FlatStyle在悬停时为系统,但在单击时为标准,c#,visual-studio,C#,Visual Studio,我见过很多窗体,比如窗口的设置/选项窗体,当鼠标悬停在按钮上时,按钮的平面样式是系统。但单击该按钮时,FlatStyle将更改为标准。这可以在Windows Skype选项窗体的“保存”和“取消”按钮上找到 顺便说一下,我希望代码是用C语言编写的,因为我在我的项目中使用C语言 我尝试了一些方法来实现这一点,但从未奏效 如果您使用的是Windows,但没有Skype,那么您可以在许多Windows设置窗体(如Windows的“播放设备”窗体)中找到我所说的内容 您还可以注意到,如果所选选项卡是按钮

我见过很多窗体,比如窗口的设置/选项窗体,当鼠标悬停在按钮上时,按钮的平面样式是系统。但单击该按钮时,FlatStyle将更改为标准。这可以在Windows Skype选项窗体的“保存”和“取消”按钮上找到

顺便说一下,我希望代码是用C语言编写的,因为我在我的项目中使用C语言

我尝试了一些方法来实现这一点,但从未奏效

如果您使用的是Windows,但没有Skype,那么您可以在许多Windows设置窗体(如Windows的“播放设备”窗体)中找到我所说的内容

您还可以注意到,如果所选选项卡是按钮本身,则按钮不会发生这种情况


如果需要编写代码/示例来实现这一点,那就太好了。

您需要为按钮单击和鼠标悬停事件连接一个事件处理程序,如以下代码所示。然后使用FlatStyle类更改外观:

  private void button1_MouseHover(object sender, EventArgs e)
        {
            button1.FlatStyle = FlatStyle.System;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            button1.FlatStyle = FlatStyle.Standard;
        }

希望这对你有帮助!如果它确实将其标记为答案。

您需要的是鼠标指针,而不是鼠标套,因此请使用此选项:

 private void button1_MouseEnter(object sender, EventArgs e)
 {
    button1.FlatStyle = FlatStyle.System;
 }

 private void button1_Down(object sender, EventArgs e)
 {
    button1.FlatStyle = FlatStyle.Standard;
 }
要调试:

 int i = 0;
 private void button1_MouseEnter(object sender, EventArgs e)
 {
    button1.FlatStyle = FlatStyle.System;
    i++;
    Console.WriteLine(i.ToString());
 }

 private void button1_Down(object sender, EventArgs e)
 {
    button1.FlatStyle = FlatStyle.Standard;
 }

谢谢你的回答。但不幸的是,我以前尝试过与您相同的代码,但它不能正常工作。@Bubbled86它不能做什么?我想我的问题与我想问的有点不同。当您将鼠标悬停在它上面时,它确实具有系统的外观,但在松开鼠标按钮(MouseUp)之前,它没有标准的外观。通常,对于具有我所说内容的应用程序,在松开鼠标按钮(左键单击)之前,您会注意到它会变成标准的flatstye。但是,直到你完全放开鼠标按钮,它才变成标准的。@Bubbled86所以请使用MouseDown事件。我以前试过MouseDown事件,然后再试一次。但是似乎删除按钮后会很快再次出现。如果跟踪鼠标悬停事件发生的次数,您应该注意到它发生了两次(因此还原按钮的样式):1。第一次将鼠标移动到按钮2中时。第二次单击按钮时,鼠标悬停再次出现。我使用了与您相同的代码,但当我单击按钮时,按钮消失。消失?你确定你用鼠标器而不是鼠标套吗?是的,我确定。我用MouseEnter代替MouseHover。那么你说的消失是什么意思呢?使用MouseEnter会产生与使用MouseHover相同的结果吗?