我在C#工作。我知道这个问题是常见的,只是我仍然无法完全隐藏顶部栏。这是我将表单文本字符串设置为""和controlbox = false
。
仍然想要阴影效果:
因此,你可以看到侧面的边框消失了(太棒了!)并且有通常的阴影(太棒了!)但顶部边框有这条奇怪的白线,我似乎无法移除。
我不想将表单border属性设置为' none'因为我喜欢集成的大小控件和形式阴影,所以这不是一个选项。还有其他建议吗?
提前致谢!
(我应该指定右上角的按钮是由我生成的,并显示我可编辑表单的边缘。上面的空白区域就是我想要移除的。)
答案 0 :(得分:0)
我无法在Windows 7中复制这个 - 我得到一个白色方块。
(这取决于FormBorderStyle - 我在其中加上'None',以完成删除边框)
我采取的步骤:
1.创建新的Windows窗体应用程序
2.单击表单窗口
3.属性 - >
3.1。 FormBorderStyle =无
3.2。 ControlBox = False
3.3。文字=
(在文本中我删除了'Form1'并将其留空)
你使用了什么项目?
我无法使用WPF轻松找到它,所以我猜这是Windows Forms应用程序。
您使用的操作系统是什么?
我使用的是Windows 7,是你的Windows 10吗?
我没有得到的是如何在右侧显示最小化,最大化和关闭按钮。 ControlNox = false会立即删除它们。
答案 1 :(得分:0)
我知道这篇文章很旧,但是我偶然发现了这个问题,并最终解决了它,因此我将其发布在这里,以供任何有帮助的人使用。
因此,我用自己的控制栏和按钮制作了一个可自定义的,可调整大小的无边界Form类,类似于OP。想法是让Form及其所有相关的WndProc
代码充当项目中所有其他对话框表单的基类。
在我运行项目时,即使我正确设置了所有适当的表单属性,我在表单顶部也得到了完全相同的白线。
问题最终是由于Form继承,所有派生的Form也都有自己的私有InitializeComponent
方法。我不知道VS IDE在派生的Form类中将FormBorderStyle属性设置为Sizable
,因为我的注意力仅集中在自定义基类上。
如果您为Form
使用自定义基类,请在派生的类中正确设置FormBorderStyle
即可解决问题。
答案 2 :(得分:0)
如果您单击表单,请转到属性,然后在 FormBorderSyle 部分中将其放在 False
中答案 3 :(得分:0)
如果您没有为阴影设置FormBorderStyle为None,我已经在这里回答了如何轻松制作阴影: Drop shadow on Borderless Winform-No flicker or disappearance
这是我的答案:
请尝试以下步骤,并返回任何错误:
将以下代码添加到名为DropShadow.cs的新代码文件中;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Core
{
public class DropShadow
{
#region Shadowing
#region Fields
private bool _isAeroEnabled = false;
private bool _isDraggingEnabled = false;
private const int WM_NCHITTEST = 0x84;
private const int WS_MINIMIZEBOX = 0x20000;
private const int HTCLIENT = 0x1;
private const int HTCAPTION = 0x2;
private const int CS_DBLCLKS = 0x8;
private const int CS_DROPSHADOW = 0x00020000;
private const int WM_NCPAINT = 0x0085;
private const int WM_ACTIVATEAPP = 0x001C;
#endregion
#region Structures
[EditorBrowsable(EditorBrowsableState.Never)]
public struct MARGINS
{
public int leftWidth;
public int rightWidth;
public int topHeight;
public int bottomHeight;
}
#endregion
#region Methods
#region Public
[DllImport("dwmapi.dll")]
[EditorBrowsable(EditorBrowsableState.Never)]
public static extern int DwmExtendFrameIntoClientArea(IntPtr hWnd, ref MARGINS pMarInset);
[DllImport("dwmapi.dll")]
[EditorBrowsable(EditorBrowsableState.Never)]
public static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, ref int attrValue, int attrSize);
[DllImport("dwmapi.dll")]
[EditorBrowsable(EditorBrowsableState.Never)]
public static extern int DwmIsCompositionEnabled(ref int pfEnabled);
[EditorBrowsable(EditorBrowsableState.Never)]
public static bool IsCompositionEnabled()
{
if (Environment.OSVersion.Version.Major < 6) return false;
bool enabled;
DwmIsCompositionEnabled(out enabled);
return enabled;
}
#endregion
#region Private
[DllImport("dwmapi.dll")]
private static extern int DwmIsCompositionEnabled(out bool enabled);
[DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")]
private static extern IntPtr CreateRoundRectRgn
(
int nLeftRect,
int nTopRect,
int nRightRect,
int nBottomRect,
int nWidthEllipse,
int nHeightEllipse
);
private bool CheckIfAeroIsEnabled()
{
if (Environment.OSVersion.Version.Major >= 6)
{
int enabled = 0;
DwmIsCompositionEnabled(ref enabled);
return (enabled == 1) ? true : false;
}
return false;
}
#endregion
#region Overrides
public void ApplyShadows(Form form)
{
var v = 2;
DwmSetWindowAttribute(form.Handle, 2, ref v, 4);
MARGINS margins = new MARGINS()
{
bottomHeight = 1,
leftWidth = 0,
rightWidth = 0,
topHeight = 0
};
DwmExtendFrameIntoClientArea(form.Handle, ref margins);
}
#endregion
#endregion
#endregion
}
}
在您的表单中,将此行添加到InitializeComponent()下;
(new Core.DropShadow()).ApplyShadows(this);