วิธีซ่อนเฉพาะปุ่มปิด (x)


151

ฉันมีกล่องโต้ตอบโมดอลและจำเป็นต้องซ่อนปุ่มปิด (X) แต่ฉันไม่สามารถใช้งานได้ ControlBox = falseเพราะฉันต้องใช้ปุ่มย่อขนาดเล็กสุดและขยายใหญ่สุด

ฉันต้องการซ่อนเพียงปุ่มปิดมีวิธีการทำเช่นนั้นหรือไม่?

ขอบคุณมาก!

อัปเดต: ฉันได้รับอนุญาตให้ปิดการใช้งานซึ่งง่ายกว่า :) ขอบคุณทุกคน!


นี่อาจเป็นสิ่งที่ yuo ต้องการ: [ซ่อนปุ่มปิด [X] ของ Win Forms ใน C # .NET] ( sameeramrutia.wordpress.com/2008/09/16/16 ) เพิ่งเริ่มต้น: hide close button c#ผลที่สองที่นี่! =)
Miguel Angelo

คุณผิดฉันไม่ต้องการปุ่มปิดการใช้งาน แต่ซ่อนมัน .. คุณสามารถหาทางออกได้หรือไม่
stefano m

8
Need เป็นคำที่แข็งแกร่ง ข้อกำหนดนี้มาจากไหน ข้อกำหนดที่แท้จริงคืออะไร - ผู้ใช้ไม่สามารถยกเลิกโปรแกรมได้หรือว่า UI "ดูเหมือนว่าไม่มีปุ่มปิด"? เพราะมีวิธีการอื่น ๆ รอบนี้และคุณจะถูกกดอย่างหนักเพื่อปิดพวกเขาทั้งหมด (เช่นตัวจัดการงาน, taskkill, alt + f4 เป็นต้น) โดยส่วนตัวฉันจะไม่ทำงานหนักเกินไปสำหรับเรื่องนี้เพราะถ้าคุณไม่ได้ใช้งานแอพทั้งหมดของคุณอีกครั้งมันจะเป็นการสูญเสียความพยายามและทำลายความคาดหวังของผู้ใช้ / ความต่อเนื่องกับโปรแกรม Windows อื่น ๆ
Merlyn Morgan-Graham

4
@Sayem มันเผยให้เห็นหน้านี้ดังนั้นอย่าเป็นนักวิจารณ์
Brian Graham

1
เกาปุ่มย่อให้เล็กสุดอยู่นอกรายการของคุณเช่นกัน การย่อไดอะล็อก modal ให้เล็กลงจะเป็นการปิดโดยอัตโนมัติ จำเป็นต้องเป็นหน้าต่างเดียวเท่านั้นที่ยังคงเปิดใช้งานอยู่ เมื่อคุณย่อขนาดให้เล็กสุดจะไม่มีหน้าต่างเหลืออยู่ที่ยังคงสามารถโฟกัสได้ดังนั้นผู้ใช้จะไม่สามารถกลับไปที่โปรแกรมของคุณได้ ตอนนี้คุณอยู่ใน "สิ่งนี้ยังคงสมเหตุสมผลหรือไม่" อาณาเขต มันไม่ได้
Hans Passant

คำตอบ:


148

คุณไม่สามารถซ่อนได้ แต่คุณสามารถปิดใช้งานได้โดยการแทนที่คุณสมบัติ CreateParams ของแบบฟอร์ม

private const int CP_NOCLOSE_BUTTON = 0x200;
protected override CreateParams CreateParams
{
    get
    {
       CreateParams myCp = base.CreateParams;
       myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON ;
       return myCp;
    }
}

ที่มา: http://www.codeproject.com/KB/cs/DisableClose.aspx


ขอบคุณฉันพบวิธีแก้ปัญหานี้ แต่เราต้องการซ่อนไม่เพียง แต่ปิดการใช้งาน :( anywat ขอบคุณ!
stefano m

4
ไม่มีวิธีอื่นนอกจากการออกแบบฟอร์มของคุณตั้งแต่เริ่มต้น
Daniel A. White

ใช่. ทำแบบฟอร์มของคุณเองให้ดีขึ้นด้วยกล่องควบคุมของคุณเองโดยไม่ต้องใช้ปุ่มปิดจากนั้นซ่อนกล่องควบคุมของแบบฟอร์มหลัก
Bahamut

คำตอบจาก 'Abhishek.Chopra' นั้นง่ายและมีประสิทธิภาพ
Altaf Patel

วิธีการเปิดใช้งานในระหว่างรันไทม์อีกครั้ง?
Mike de Klerk

158

เราสามารถซ่อนปุ่มปิดในแบบฟอร์มโดยการตั้งค่า this.ControlBox=false;


29
คุณอ่านคำถามที่เขาระบุว่าไม่ใช่ตัวเลือกหรือไม่?
Servy

28
การค้นหาของ Google และ SO QA นี้ได้รับความนิยมสูงสุด และคำตอบนี้คือสิ่งที่ฉันกำลังมองหา ขอบคุณ Abhishek ...
Abel Gaxiola

15
ที่ซ่อนปุ่มปรับขนาดเหล่านั้นทั้งหมด ไม่ใช่แค่ X.
Rich Shealer

1
ขอบคุณมาก! วิธีที่ง่ายที่สุด

26

คุณสามารถซ่อนได้โดยลบเมนูระบบทั้งหมด:

private const int WS_SYSMENU = 0x80000;
protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.Style &= ~WS_SYSMENU;
        return cp;
    }
}

แน่นอนว่าการทำเช่นนั้นจะเป็นการลบปุ่มย่อและขยายขนาดออก

หากคุณเก็บเมนูระบบ แต่ลบรายการปิดปุ่มปิดจะยังคงอยู่ แต่ถูกปิดใช้งาน

ทางเลือกสุดท้ายคือการทาสีบริเวณที่ไม่ใช่ลูกค้าด้วยตัวเอง มันค่อนข้างยากที่จะทำให้ถูกต้อง


4
ใช้งานได้ดีเช่นกัน! แต่ControlBox = falseนั้นใช้งานง่ายตามที่คุณต้องการ
simmeone

1
นี่เหมือนกับการตั้งค่าControlBoxเป็นเท็จ นอกจากนี้มันล้มเหลวตามข้อกำหนด: ฉันต้องเก็บปุ่มย่อเล็กสุดและขยายใหญ่สุด
whiteshooz

23

คุณสามารถซ่อนกล่องปิดโดยใช้

this.ControlBox = false;

และอย่าลืมเพิ่ม white space this.Text = " "เพื่อทำให้เป็นแบบนี้

ป้อนคำอธิบายรูปภาพที่นี่


2
นี่คือสิ่งที่ฉันต้องการ ขอบคุณ
Kosmas

2
สิ่งนี้ไม่ถูกต้อง โดยตรงจากคำถามของ OP: ฉันไม่สามารถใช้ได้ControlBox = false
Martin

8

หากคุณต้องการซ่อนมันอย่างเช่นใน "ไม่ปรากฏ" คุณอาจต้องสร้างรูปแบบไร้ขอบและวาดองค์ประกอบคำบรรยายภาพด้วยตัวคุณเอง VisualStyles library มีองค์ประกอบของ Windows คุณจะต้องเพิ่มกลับไปในฟังก์ชั่นการปรับขนาดแบบฟอร์มใหม่หรือย้ายแบบฟอร์มโดยการคว้าแถบคำบรรยายภาพ ไม่ต้องพูดถึงเมนูระบบในมุม

ในกรณีส่วนใหญ่เป็นการยากที่จะพิสูจน์ว่าไม่มีปุ่ม "ปิด" โดยเฉพาะเมื่อคุณต้องการรูปแบบคำกริยาที่มีความสามารถลดลง การย่อขนาด modal ให้น้อยลงทำให้ไม่มีเหตุผลจริงๆ


2

ในคุณสมบัติของฟอร์มตั้งค่า 'กล่องควบคุม' = เป็นเท็จ แต่มันจะซ่อนขนาดย่อให้เล็กสุดและขยายให้ใหญ่สุดเช่นกัน


1

คุณสามารถซ่อนปุ่มปิดได้โดยเปลี่ยน FormBorderStyle จากส่วนคุณสมบัติหรือโดยทางโปรแกรมใน Constructor โดยใช้:

public Form1()
{
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
}

จากนั้นคุณสร้างรายการแถบเมนูเพื่อออกจากแอปพลิเคชัน

ไชโย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.