Usuń pasek tytułu w Windows Forms

82

Jak mogę usunąć niebieskie obramowanie znajdujące się na górze formularza okna? (Nie znam dokładnie jego nazwy).

lkj
źródło
3
nazywa się TitleBar i prawdopodobnie możesz go ukryć, zmieniając właściwość stylu obramowania formularza na brak obramowania lub brak.
Davide Piras,

Odpowiedzi:

140

Możesz ustawić Właściwość FormBorderStylena none w projektancie lub w kodzie:

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
P-Storm
źródło
Niestety nie jest to problem w systemie Windows 10 (przynajmniej na niektóre wersje) z FormBorderStyle.Nonew postaci zmiany rozmiaru .
Rekshino
75

jeśli Blue Border thats on top of the Window Formmasz na myśli pasek tytułu , ustaw ControlBoxwłaściwość Forms na falseiText właściwość na pusty ciąg („”).

oto fragment:

this.ControlBox = false;
this.Text = String.Empty;
Nika G.
źródło
8
Twoje rozwiązanie ma przewagę nad ustawieniem stylu obramowania na Brak, ponieważ ... pozostawia granicę nienaruszoną :) +1
Spook
I jakoś, jeśli zrobisz to przez FormBorderStyle.Noneto, uniemożliwi ci to w jakiś sposób rysowanie na formularzu (OnPaint ustawia obraz w pudełku graficznym, które ma Dockustawione na Fill), działało dobrze, dopóki nie zmieniłem ustawienia obramowania FormBorderStyle.None, ale w ten sposób rysowanie nadal działa dla ja :)
DrCopyPaste
@JohnNguyen nie działa? to dziwne, czy na pewno zaimplementowałeś to poprawnie?
Nika G.
3
To rozwiązanie wygląda naprawdę źle w systemie Windows 10 - „ukryty” pasek tytułu nie znika całkowicie - pozostawiając „wypukłość” w górnej części okna. Zakładam, że jest to spowodowane cienkimi krawędziami okien systemu Windows 10. Nie znalazłem sposobu na obejście tego. Wygląda na to, że utknąłem na trasie FormBorderStyle.None .
Fool Running
1
ustawienie FormBorderStyle na Sizable z powyższą sugestią działa, ale ostrzegamy, że Windows 10 dodaje brzydki pasek u góry okna poza prostokątem klienta, który wydaje się być obszarem chwytania / skalowaniem do zmiany rozmiaru okna w pionie (to wydaje się, że górna krawędź jest renderowana wewnątrz widocznej krawędzi formularza, a pozostałe są renderowane poza o_O).
fusi
23

Dodaj również ten fragment kodu do formularza, aby nadal można było go przeciągać.

Po prostu dodaj go tuż przed konstruktorem (metoda, która wywołuje InitializeComponent ()


private const int WM_NCHITTEST = 0x84;
private const int HTCLIENT = 0x1;
private const int HTCAPTION = 0x2;

///
/// Handling the window messages
///
protected override void WndProc(ref Message message)
{
    base.WndProc(ref message);

    if (message.Msg == WM_NCHITTEST && (int)message.Result == HTCLIENT)
        message.Result = (IntPtr)HTCAPTION;
}

Ten kod pochodzi z: https://jachman.wordpress.com/2006/06/08/enhanced-drag-and-move-winforms-without-having-a-titlebar/

Teraz, aby pozbyć się paska tytułu, ale nadal mieć obramowanie, połącz kod z innej odpowiedzi:

this.ControlBox = false;

this.Text = String.Empty;

z tą linią:

this.FormBorderStyle = FormBorderStyle.FixedSingle;


Umieść te 3 linie kodu w zdarzeniu OnLoad formularza, a powinieneś mieć ładny, „pływający” formularz, który można przeciągać cienką ramką (użyj FormBorderStyle.None, jeśli nie chcesz obramowania).

coding_is_fun
źródło
Ta opcja umożliwia dostosowanie rozmiaru okna. Znacznie lepsze niż ustawienie FormBorderStyle na None. Właśnie tego chciałem.
Antonio Rodríguez
cześć @ AntonioRodríguez, jak możesz zmienić rozmiar tego formularza? Mam normalny formularz i umieściłem to w zdarzeniu Load, pokazało obramowanie pojedynczej linii + brak formularza paska tytułu, ale nie mogę zmienić rozmiaru (jestem w systemie Windows 10) this.ControlBox = false; this.Text = String.Empty; this.FormBorderStyle = FormBorderStyle.FixedSingle;
haiduong87
11
 Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
Joran Dob
źródło
10

Zestaw FormsBorderStyleformularza do None.

Jeśli tak, to od Ciebie zależy, jak zaimplementować funkcję przeciągania i zamykania okna.

Maxim V. Pavlov
źródło
Nie ma sposobu, aby zachować spory format bez obramowania i nie mieć tego irytującego paska tytułu na górze. Nawet bezpośrednie użycie Win32 nie pozbędzie się go. Jeśli nie masz granicy, musisz wdrożyć własne metody zamknięcia, maksymalizacji, minimalizacji, które są dość łatwe. Wdrażanie znacznych rozmiarów jest jednak właściwym problemem, aby być niezawodnym. Próbowałem, ale w końcu się poddałem, to dużo pracy bez większego zysku.
djack109
1

Udostępniam swój kod. form1.cs: -

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BorderExp
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;

    }

    private void ExitClick(object sender, EventArgs e)
    {
        Application.Exit();
    }

    private void MaxClick(object sender, EventArgs e)
    {
        if (WindowState ==FormWindowState.Normal)
        {
            this.WindowState = FormWindowState.Maximized;
        }
        else
        {
            this.WindowState = FormWindowState.Normal;
        }
    }

    private void MinClick(object sender, EventArgs e)
    {
        this.WindowState = FormWindowState.Minimized;
       }
    }
    }

Teraz projektant: -

namespace BorderExp
 {
   partial class Form1
  {
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    #region Windows Form Designer generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
        this.button1 = new System.Windows.Forms.Button();
        this.button2 = new System.Windows.Forms.Button();
        this.button3 = new System.Windows.Forms.Button();
        this.SuspendLayout();
        // 
        // button1
        // 
        this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
        this.button1.BackColor = System.Drawing.SystemColors.ButtonFace;
        this.button1.BackgroundImage = global::BorderExp.Properties.Resources.blank_1_;
        this.button1.FlatAppearance.BorderSize = 0;
        this.button1.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
        this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
        this.button1.Location = new System.Drawing.Point(376, 1);
        this.button1.Name = "button1";
        this.button1.Size = new System.Drawing.Size(27, 26);
        this.button1.TabIndex = 0;
        this.button1.Text = "X";
        this.button1.UseVisualStyleBackColor = false;
        this.button1.Click += new System.EventHandler(this.ExitClick);
        // 
        // button2
        // 
        this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
        this.button2.BackColor = System.Drawing.SystemColors.ButtonFace;
        this.button2.BackgroundImage = global::BorderExp.Properties.Resources.blank_1_;
        this.button2.FlatAppearance.BorderSize = 0;
        this.button2.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
        this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
        this.button2.Location = new System.Drawing.Point(343, 1);
        this.button2.Name = "button2";
        this.button2.Size = new System.Drawing.Size(27, 26);
        this.button2.TabIndex = 1;
        this.button2.Text = "[]";
        this.button2.UseVisualStyleBackColor = false;
        this.button2.Click += new System.EventHandler(this.MaxClick);
        // 
        // button3
        // 
        this.button3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
        this.button3.BackColor = System.Drawing.SystemColors.ButtonFace;
        this.button3.BackgroundImage = global::BorderExp.Properties.Resources.blank_1_;
        this.button3.FlatAppearance.BorderSize = 0;
        this.button3.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
        this.button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
        this.button3.Location = new System.Drawing.Point(310, 1);
        this.button3.Name = "button3";
        this.button3.Size = new System.Drawing.Size(27, 26);
        this.button3.TabIndex = 2;
        this.button3.Text = "___";
        this.button3.UseVisualStyleBackColor = false;
        this.button3.Click += new System.EventHandler(this.MinClick);
        // 
        // Form1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.BackgroundImage = global::BorderExp.Properties.Resources.blank_1_;
        this.ClientSize = new System.Drawing.Size(403, 320);
        this.ControlBox = false;
        this.Controls.Add(this.button3);
        this.Controls.Add(this.button2);
        this.Controls.Add(this.button1);
        this.Name = "Form1";
        this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
        this.Text = "Form1";
        this.Load += new System.EventHandler(this.Form1_Load);
        this.ResumeLayout(false);

    }

    #endregion

    private System.Windows.Forms.Button button1;
    private System.Windows.Forms.Button button2;
    private System.Windows.Forms.Button button3;
    }
   }

zrzut ekranu: - NoBorderForm

Stephen Kennedy
źródło