2008-10-13 46 views
10

Làm cách nào để cửa sổ của tôi không có thanh tiêu đề nhưng xuất hiện trên thanh tác vụ với một số văn bản mô tả? Nếu bạn đặt thuộc tính Văn bản của Biểu mẫu thì .net cung cấp cho nó thanh tiêu đề mà tôi không muốn.Cách tạo cửa sổ có văn bản thanh tác vụ nhưng không có thanh tiêu đề

 this.ControlBox = false; 
     this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; 
     this.MaximizeBox = false; 
     this.MinimizeBox = false; 
     this.ShowInTaskbar = true; 
     this.Text = "My title for task bar"; 

Tôi đã tìm thấy một giải pháp một phần, để ghi đè CreateParams:

protected override System.Windows.Forms.CreateParams CreateParams 
    { 
     get 
     { 
      System.Windows.Forms.CreateParams cp = base.CreateParams; 
      cp.Style &= ~0x00C00000; // WS_CAPTION 
      return cp; 
     } 
    } 

Tuy nhiên điều này gây ra cửa sổ của tôi để được thay đổi kích cỡ, nếu như họ có một thanh tiêu đề, tức là nó là cao hơn nó nên được. Có giải pháp tốt cho việc này không?

Trả lời

5

Một cách tiếp cận để xem xét có thể là để thiết lập các FormBorderStyle tài sản của bạn Form-None (thay vì FixedDialog).

Hạn chế của phương pháp này là bạn mất đường viền của cửa sổ cũng như thanh tiêu đề. Kết quả của việc này là bạn bị mất định dạng lại vị trí/thay đổi kích thước logic mà bạn thường nhận được "miễn phí" với Windows Forms; bạn sẽ cần phải giải quyết vấn đề này bằng cách triển khai logic di chuyển/thay đổi kích thước của biểu mẫu trong trình xử lý sự kiện MouseDown và MouseMove của biểu mẫu.

Tôi cũng muốn biết về các giải pháp tốt hơn.

2

Chỉ cần đặt kiểu đường viền là Không.

this.FormBorderStyle = FormBorderStyle.None; 
2

Khi bạn đã xóa đường viền với FormBorderStyle, như đã đề cập, bạn có thể làm cho nó có thể kéo được khá dễ dàng. Tôi mô tả điều này tại http://www.blackwasp.co.uk/DraggableBorderless.aspx.

+0

Tốt và ví dụ, nhưng trong thế giới thực, nhưng thường có nhiều cân nhắc hơn khi kéo biểu mẫu, ví dụ: chúng tôi không muốn kéo chuột nếu trên điều khiển hoặc giữa các điều khiển hoặc muốn thay đổi kích thước nếu nó gần biên giới. – dbkk

+0

Tuyệt đối. Bạn cũng cần nắm bắt điều đó, kiểm tra mức độ gần với ranh giới biểu mẫu, thay đổi con trỏ chuột, nhận kích thước đường viền ưa thích từ Windows, v.v. Một chút quá nhiều cho một ví dụ - có lẽ tôi sẽ tạo một ví dụ khác. – BlackWasp

6

Trong trường hợp của tôi, tôi có một mẫu với FormBorderStyle = FormBorderStyle.SizableToolWindow và sau đây CreateParams override đã làm các trick (tức là bây giờ tôi có một hình thức mà không chú thích và không có lợi nhuận bổ sung cho danh hiệu, nhưng nó giữ danh hiệu trong thanh tác vụ):

protected override System.Windows.Forms.CreateParams CreateParams 
{ 
    get 
    { 
     var parms = base.CreateParams; 
     parms.Style &= ~0x00C00000; // remove WS_CAPTION 
     parms.Style |= 0x00040000; // include WS_SIZEBOX 
     return parms; 
    } 
} 
Các vấn đề liên quan