c#中是否存在任何类型的窗口,窗体或任何看起来不像通常的窗体或对话框并且可以包含标签之类的组件的东西?像这张图片上的黑色矩形:如何创建非矩形窗体?
我还需要一个“窗口”是可移动就像当你在ControlBox
,但在它的任何地方按住鼠标点击的形式。然而,它(或者至少它的背景)应该在某些层次上具有透明度等特性(高,中,低透明度)。
我应该使用什么?
谢谢。
c#中是否存在任何类型的窗口,窗体或任何看起来不像通常的窗体或对话框并且可以包含标签之类的组件的东西?像这张图片上的黑色矩形:如何创建非矩形窗体?
我还需要一个“窗口”是可移动就像当你在ControlBox
,但在它的任何地方按住鼠标点击的形式。然而,它(或者至少它的背景)应该在某些层次上具有透明度等特性(高,中,低透明度)。
我应该使用什么?
谢谢。
如果您需要完整的Form级别的功能,则可以通过FormBorderStyle = None来创建Form。这将从窗体中移除整个边框,并且它将显示为一个扁平的矩形,并带有背景颜色。
有几个问题与此:
根据你关于如何解决#2的问题,有一个关于How to drag a borderless Windows Form by mouse的SO页面。如果它被很快删除,我会重现乔伊的代码(基于链接的文章):
// DllImportAttribute requires reference to System.Runtime.InteropServices
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;
[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();
public Form1()
{
InitializeComponent();
}
private void Form1_MouseDown_1(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
请注意,我没有做任何事情不是仅仅将其粘贴在和验证测试此等,是的,你可以在其内容区域内用鼠标拖动你的表单。另请注意,此拖动操作仅适用于窗体的空白区域 - 如果鼠标悬停在某个窗体的控件上,您将无法拖动它。
编辑:这个问题的标题被改变了,因为它最初发布 - 原来,这个问题基本上没有致力于如何创建一个非矩形形式,更多的是如何创建一个无国界形式 - 但问题的非矩形边界部分现在由Olivier Jacot-Descombes解决。我不会偷他的贡献,但这两个答案的组合应该给你你想要的东西。
通过将BackgroundImage
属性设置为适当的位图,可以在WinForms Form
中实现此目的。例如为:
然后,设置形式的FormBorderStyle
到None
并设置TransparencyKey
到具有要在该位图(Color.Red
在本例中)的透明的颜色。而已!
您将无法拥有部分透明区域;但是,您可以设置表格的整体Opacity
(= 100% - 透明度)。
请注意,由于您没有标题栏(因为FormBorderStyle
= None
),您将无法使用关闭按钮关闭窗体,并通过拖动标题来移动窗口酒吧。你将不得不通过处理鼠标或键盘事件来处理这些事情。
当然,你可以像往常一样在这个表单上放置任何类型的控件。
表单无国界? – Mephy 2014-11-01 21:45:02
这是一个工具提示 – 2014-11-01 21:49:25
您可以修改WinForms表单的外观以查看所需的内容。从技术上讲,这与C#完全无关。你需要明确你在问什么框架,Winforms或WPF? – 2014-11-01 21:50:39