没有控制框的Windows窗体对话框图标

时间:2012-01-23 10:50:44

标签: c# .net winforms

我想知道是否有一种方法可以在我的自定义对话框的左上角显示图标,同时禁用控制框,最小化框和最大化框?单击图标(关闭,关闭,移动等)时,我不需要任何功能。我只是希望它看起来更漂亮。

3 个答案:

答案 0 :(得分:3)

无控制框=>没有图标......

当禁用ControlBox时,窗体windowstyle WS_SYSMENU标志(以某种方式远远不同)被删除,因此Windows无法显示图标。实际上我还没有找到关于为什么(以及如何)右上角图标继续存在而没有WS_SYSMENU的最终解释......但是找到了一个更适合您需求的更好的解决方案。

    private const int GWL_STYLE = -16;
    private const int WS_CLIPSIBLINGS = 1 << 26;

    [DllImport("user32.dll", CharSet = CharSet.Auto, EntryPoint = "SetWindowLong")]
    public static extern IntPtr SetWindowLongPtr32(HandleRef hWnd, int nIndex, HandleRef dwNewLong);
    [DllImport("user32.dll", CharSet = CharSet.Auto, EntryPoint = "GetWindowLong")]
    public static extern IntPtr GetWindowLong32(HandleRef hWnd, int nIndex);

    protected override void OnLoad(EventArgs e) {
        int style = (int)((long)GetWindowLong32(new HandleRef(this, this.Handle), GWL_STYLE));
        SetWindowLongPtr32(new HandleRef(this, this.Handle), GWL_STYLE, new HandleRef(null, (IntPtr)(style & ~WS_CLIPSIBLINGS)));

        base.OnLoad(e);
    }

答案 1 :(得分:2)

您可以将ControlBox属性设置为false。 Control Box,最大化,最小化按钮不会显示在对话框中。

Form1.ControlBox = false;

否则  你可以这样设置,如果你不愿意禁用整个控制盒。您可以将ShowIcon属性设置为true。

Form1.MaximizeBox = false;
Form1.MinimizeBox = false;
Form1.ShowIcon=true; 

答案 2 :(得分:-1)

您始终可以在左上角添加图像控件并为其指定图标。那会有帮助吗?