【问题标题】:Windows Forms dialog icon without control box没有控制框的 Windows 窗体对话框图标
【发布时间】:2012-01-23 10:50:44
【问题描述】:

我想知道在禁用控制框、最小化框和最大化框的情况下,有没有办法在自定义对话框的左上角显示图标?单击图标(关于、关闭、移动等)时,我不需要任何功能。我只是想让它看起来更好看。

【问题讨论】:

  • 您对此有多大把握?没有办法了吗?
  • @Mikant,您可以发布一个答案,这样我就可以将您的答案视为正确。
  • 人们希望在单击表单图标时看到控制框菜单。压制它不可避免地会让一些人感到沮丧。

标签: c# .net winforms


【解决方案1】:

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

当 ControlBox 被禁用时,窗体的窗口样式 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);
    }

【讨论】:

  • 我无法使用您提供的此代码。我将使用带有关闭按钮的控制框,因为所有人都说这是用户期望的常规情况。
  • 似乎不起作用。有效的方法是从系统菜单中禁用或删除 SC_CLOSE 项。禁用的关闭框仍然可见,但不可点击。见codeguru.com/csharp/csharp/cs_misc/userinterface/article.php/…
【解决方案2】:

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

Form1.ControlBox = false;

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

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

【讨论】:

  • 是的,我知道,但在这种情况下,左上角的图标不再可见。
  • 这个图标好像只有在启用控制框的情况下才可见。
【解决方案3】:

您始终可以在左上角添加一个图像控件并将图标分配给它。会有帮助吗?

【讨论】:

  • 不行,图片只能在客户区添加,不能在我需要的标题栏中添加。
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多