legongju.com
我们一直在努力
2025-01-11 11:02 | 星期六

利用C#实现子窗口的弹出与隐藏动画

在C#中,你可以使用Windows Forms或WPF来创建子窗口并实现弹出和隐藏动画。这里我将分别为这两种技术提供一个示例。

Windows Forms 示例:

首先,确保你已经添加了System.Windows.Forms引用。

  1. 创建一个新的Windows Forms应用程序项目。
  2. 在解决方案资源管理器中,双击Form1以打开设计器。
  3. 从工具箱中,将一个Button控件拖放到Form1上。
  4. 双击Button以创建button1_Click事件处理程序。
  5. Form1类中,添加以下代码:
using System;
using System.Windows.Forms;

public partial class Form1 : Form
{
    private Form childForm;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (childForm == null)
        {
            childForm = new Form();
            childForm.Size = new System.Drawing.Size(200, 200);
            childForm.StartPosition = FormStartPosition.Manual;
            childForm.Location = new System.Drawing.Point(this.Location.X + this.Width, this.Location.Y);
            childForm.FormClosed += ChildForm_FormClosed;
        }

        if (childForm.Visible)
        {
            HideChildForm();
        }
        else
        {
            ShowChildForm();
        }
    }

    private void ShowChildForm()
    {
        childForm.Show();
        Timer timer = new Timer();
        timer.Interval = 10;
        timer.Tick += (sender, e) =>
        {
            if (childForm.Width < 200)
            {
                childForm.Width += 20;
                childForm.Left -= 10;
            }
            else
            {
                timer.Stop();
            }
        };
        timer.Start();
    }

    private void HideChildForm()
    {
        Timer timer = new Timer();
        timer.Interval = 10;
        timer.Tick += (sender, e) =>
        {
            if (childForm.Width > 0)
            {
                childForm.Width -= 20;
                childForm.Left += 10;
            }
            else
            {
                childForm.Hide();
                timer.Stop();
            }
        };
        timer.Start();
    }

    private void ChildForm_FormClosed(object sender, FormClosedEventArgs e)
    {
        childForm = null;
    }
}

WPF 示例:

首先,确保你已经添加了PresentationFrameworkSystem.Windows引用。

  1. 创建一个新的WPF应用程序项目。
  2. 在解决方案资源管理器中,双击MainWindow.xaml以打开设计器。
  3. MainWindow.xaml中,添加以下代码:
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="200" Width="200">
    
       
  1. MainWindow.xaml.cs中,添加以下代码:
using System;
using System.Windows;
using System.Windows.Media.Animation;

namespace WpfApp
{
    public partial class MainWindow : Window
    {
        private Window childWindow;

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (childWindow == null)
            {
                childWindow = new Window();
                childWindow.Title = "Child Window";
                childWindow.Width = 200;
                childWindow.Height = 200;
                childWindow.WindowStartupLocation = WindowStartupLocation.Manual;
                childWindow.Left = this.Left + this.Width;
                childWindow.Top = this.Top;
                childWindow.Closed += ChildWindow_Closed;
            }

            if (childWindow.Visibility == Visibility.Visible)
            {
                HideChildWindow();
            }
            else
            {
                ShowChildWindow();
            }
        }

        private void ShowChildWindow()
        {
            DoubleAnimation widthAnimation = new DoubleAnimation(0, 200, TimeSpan.FromMilliseconds(200));
            DoubleAnimation leftAnimation = new DoubleAnimation(childWindow.Left - 200, childWindow.Left, TimeSpan.FromMilliseconds(200));
            childWindow.BeginAnimation(Window.WidthProperty, widthAnimation);
            childWindow.BeginAnimation(Window.LeftProperty, leftAnimation);
            childWindow.Show();
        }

        private void HideChildWindow()
        {
            DoubleAnimation widthAnimation = new DoubleAnimation(200, 0, TimeSpan.FromMilliseconds(200));
            DoubleAnimation leftAnimation = new DoubleAnimation(childWindow.Left, childWindow.Left + 200, TimeSpan.FromMilliseconds(200));
            childWindow.BeginAnimation(Window.WidthProperty, widthAnimation);
            childWindow.BeginAnimation(Window.LeftProperty, leftAnimation);
            childWindow.Visibility = Visibility.Hidden;
        }

        private void ChildWindow_Closed(object sender, EventArgs e)
        {
            childWindow = null;
        }
    }
}

这些示例将创建一个主窗口,其中包含一个按钮。当单击该按钮时,将显示或隐藏子窗口,同时使用动画效果展开或收起子窗口。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/101520.html

相关推荐

  • 如何测试C# BACnet应用程序

    如何测试C# BACnet应用程序

    要测试C# BACnet应用程序,请按照以下步骤操作: 准备测试环境:
    确保你的开发环境已经安装了支持BACnet协议的库和工具。例如,你可以使用Ethernet/IP(ENI...

  • C# BACnet的安全性如何保障

    C# BACnet的安全性如何保障

    BACnet(Building Automation and Control Networks)是一种用于建筑自动化和控制系统的通信协议 网络安全:BACnet网络应该使用安全的网络技术,例如VLAN、防火墙...

  • BACnet在C#中的性能优化建议

    BACnet在C#中的性能优化建议

    在C#中使用BACnet时,可以采取以下措施来提高性能和效率: 选择合适的库和工具:选择一个性能良好、功能完善且活跃的开源库或商业库。例如,Yabe(Yet Another B...

  • C# BACnet编程的难点在哪里

    C# BACnet编程的难点在哪里

    BACnet(Building Automation and Control Network)是一种为建筑自动化和控制网络定义的通信协议。在C#中编写BACnet程序可能会遇到一些难点,主要包括以下几点:...

  • C#子窗口的父子关系如何建立与维护

    C#子窗口的父子关系如何建立与维护

    在C#中,建立和维护子窗口与父窗口之间的关系主要依赖于Windows Forms或WPF等图形界面库。以下是使用Windows Forms创建父子窗口关系的方法: 首先,创建一个父窗...

  • 鼠标滚轮在C#中的滚动方向如何判断

    鼠标滚轮在C#中的滚动方向如何判断

    在C#中,你可以通过处理鼠标滚轮事件来判断滚动方向
    首先,确保你已经添加了System.Windows.Forms命名空间的引用。
    using System.Windows.Forms; 然后...

  • C#中如何捕获鼠标滚轮事件

    C#中如何捕获鼠标滚轮事件

    在C#中,要捕获鼠标滚轮事件,你需要在窗体或控件上添加一个MouseWheel事件处理程序
    using System;
    using System.Windows.Forms; public class MyForm...

  • C#中Vector与其他集合类型的比较分析

    C#中Vector与其他集合类型的比较分析

    在C#中,Vector并不是一个内置的数据结构 性能:List和Array在内存分配和性能方面通常优于Vector。具体来说,List在添加元素时会自动调整大小,而Array需要手动调...