美文网首页C#
创建非矩形 WinForm 窗体

创建非矩形 WinForm 窗体

作者: 稚琦 | 来源:发表于2018-01-03 16:28 被阅读0次

创建非矩形窗体的过程有两个要素:创建成形的窗体,并编写某些编程逻辑的代码以允许移动和关闭窗体。 第二个步骤是必要的,因为自定义形状的窗体没有标题栏,并且它本身不具有任何功能,例如在屏幕中移动窗体以及关闭窗体的能力。 因此,编写重现这些功能的代码是非常必要的。
创建非矩形窗体的过程包含三个步骤:
1.创建一个作为窗体图面的位图。 (一种有效的方式是,您可以从矩形中“裁剪掉”所需的窗体形状。)
2.创建 Windows 应用程序项目,将其属性设置为移除标题栏并使用位图作为窗体背景。
3.输入重新创建标题栏所提供功能的代码,例如移动和关闭窗体。

窗口属性设置:

  1. 将 FormBorderStyle 属性设置为 None。此属性从窗体中移除标题栏。 (它同时移除标题栏所提供的功能,包括关闭和移动窗体的能力。 不过,以下代码中解决了这种不足。)
  2. 将窗体的 BackgroundImage 属性设置为先前创建的位图文件。 不必将文件添加到项目系统中;这将在指定该文件作为背景图像时自动完成。此属性将该位图图像设置为窗体的背景。 (当与以下指定的 TransparencyKey 属性前后使用时,此属性将定义窗体的形状。)
    3.将 TransparencyKey 属性设置为位图文件的背景色。
    此属性告诉应用程序窗体中的哪些部分需要设置为透明。

编写关闭窗体的代码:
1.将一个 Button 控件添加到窗体中。
2.添加代码,使用户可通过调用 Close 方法关闭该窗体。

    private void button1_Click(object sender, System.EventArgs e)
    {
       this.Close();
    }

编写移动窗体的代码(可选):
1.创建一个在拖动窗体时使窗体移动的过程。 输入类似于下文显示的代码来创建新的 Point 对象。 这将作为计算如何移动窗体时的变量。 isMouseDown 字段用于跟踪用户是否按下了鼠标按钮。 该窗体应只在用户按下鼠标按钮时才移动。

    private Point mouseOffset;
    private bool isMouseDown = false;

2.为窗体的 MouseDown 事件创建一个事件处理程序。 在处理程序中添加代码,使用户可以在窗体上的任意位置单击以拖动窗体。
输入类似于下文显示的代码,以根据鼠标指针的当前位置,将坐标分配给mouseOffset 变量。 在以下代码中,请注意偏移位置是使用有关边框大小 (FrameBorderSize.Width) 和标题栏高度 (CaptionHeight) 的系统信息进行计算的。 在测试偏移位置时必须考虑这些因素,因为某些测量结果是使用工作区得出的,而另一些测量结果是使用屏幕坐标得出的。 因此,偏移位置等于边框宽度加上标题高度,再加上窗体工作区的偏移位置。

    private void Form1_MouseDown(object sender,System.Windows.Forms.MouseEventArgs e)
    {
        int xOffset;
        int yOffset;

    if (e.Button == MouseButtons.Left) 
  {
    xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
    yOffset = -e.Y - SystemInformation.CaptionHeight - 
        SystemInformation.FrameBorderSize.Height;
    mouseOffset = new Point(xOffset, yOffset);
    isMouseDown = true;
  }    
}

3.为窗体的 MouseMove 事件创建一个事件处理程序。
输入类似以下内容的代码。 单击鼠标左键并且拖动鼠标时,窗体的 Location 属性将设置为新的位置。

    private void Form1_MouseMove(object sender,System.Windows.Forms.MouseEventArgs e)
    {
        if (isMouseDown) 
    {
        Point mousePos = Control.MousePosition;
        mousePos.Offset(mouseOffset.X, mouseOffset.Y);
        Location = mousePos;
    }
  }

4.为窗体的 MouseUp 事件创建一个事件处理程序。 输入类似以下内容的代码。

    private void Form1_MouseUp(object sender,System.Windows.Forms.MouseEventArgs e)
    {
      // Changes the isMouseDown field so that the form does
      // not move unless the user is pressing the left mouse button.
      if (e.Button == MouseButtons.Left) 
      {
          isMouseDown = false;
      }
    }

相关文章

  • 创建非矩形 WinForm 窗体

    创建非矩形窗体的过程有两个要素:创建成形的窗体,并编写某些编程逻辑的代码以允许移动和关闭窗体。 第二个步骤是必要的...

  • Delphi窗体创建

    Delphi窗体创建,主要分为模态创建和非模态创建窗体,区别在于当显示模式窗体的时候你是不能操作本程序的其他窗体的...

  • MessageBox置顶的方法

    上面新创建的Winform并不会显示出来,此窗体在最上层,而MessageBox会在此窗体上层显示,这样就保证了M...

  • 11.6

    今天,老师继续讲解了winform的模式与非模式窗体,image控件,定时器控件,滚动条控件,还是要多了解谢谢控件...

  • 2019-03-26居中

    C# winform解决解决窗体第一次设置为最大化后,点击最大化按钮窗体无法居中问题...

  • 11月2日四期C#总结

    今天我们学习了第四章的WinForm、窗口的基本控件、窗体、委托。 Form类定义了窗体的基本属性和行为 ...

  • winform 窗体控件小结

    1.固定頁面大小:FormBorderStyle选项,选择FixedDialog2.多行滚动条:ScrollBar...

  • 窗体winform仿照qq

    using System; using System.Threading; using System.Window...

  • 01-Form窗体

    Windows应用程序也称为WinForm应用程序,通常包含一个或多个窗体,窗体中又包含了多种控件,如按钮、文本框...

  • Winform窗体圆角以及描边完美解决方案

    圆角 项目中需要把窗体的四角改为圆角,winform窗体的圆角不是很好设置或者说绘制。在网上查找了很多方案,最终找...

网友评论

    本文标题:创建非矩形 WinForm 窗体

    本文链接:https://www.haomeiwen.com/subject/puahnxtx.html