2009-05-06 29 views
6

Thông thường các chữ cái nóng trên MenuStrip được gạch dưới. (& Tệp, & Mở, v.v) Trên một dự án tôi đang làm việc trên gạch chân hiển thị trong nhà thiết kế, nhưng không phải lúc chạy. Tôi không thể tìm thấy tài sản kiểm soát điều này. Có ai ngoài kia biết không?Menu WinformsMã nhỏ gọn được gạch chân Hotline

+2

Chúng có hiển thị khi bạn nhấn phím Alt không? –

Trả lời

9

Trong Windows, có cài đặt có hay không hiển thị gạch dưới. Để thay đổi các thiết lập,

  1. Nhấp chuột phải trên desktop
  2. Chọn "Properties"
  3. Bấm vào "Appearance" tab
  4. Nhấp vào nút "Effects"
  5. Bỏ chọn hộp có nhãn " Ẩn các chữ cái được gạch dưới để điều hướng bằng bàn phím "
+0

Đẹp nhất. Tôi biết rằng thiết lập ở đâu đó, nhưng hãy nhớ làm thế nào để có được nó. – Crispy

+0

Cảm ơn, đó là nó. Cảm thấy ngớ ngẩn khi đặt câu hỏi ngay bây giờ. :-) – Jeff

+2

Tôi có nghĩa là thực sự giải quyết vấn đề? Bất kỳ người dùng nào nhận được ứng dụng của bạn sẽ cần phải thay đổi cài đặt đó theo cách thủ công hoặc bạn sẽ cần thêm một thứ gì đó vào ứng dụng thiết lập để tự động thay đổi cài đặt. – Mark

7

Chúng sẽ chỉ hiển thị khi chạy khi người dùng nhấn phím alt. Khi bạn nhấn phím alt, biểu mẫu cho rằng bạn có thể muốn sử dụng một trong các phím tắt để nó hiển thị bất kỳ gạch dưới nào.

13

Bạn có thể buộc người dùng thấy gạch dưới bằng cách tạo trình kết xuất ToolStrip tùy chỉnh. Phải mất một thời gian tôi mới tìm ra cách vượt qua câu trả lời của Chris. Dưới đây là các renderer tôi đã tạo:

using System; 
using System.Drawing; 
using System.Windows.Forms; 

namespace YourNameSpace 
{ 
    class CustomMenuStripRenderer : ToolStripProfessionalRenderer 
    { 
     public CustomMenuStripRenderer() : base() { } 
     public CustomMenuStripRenderer(ProfessionalColorTable table) : base(table) { } 

     protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) 
     { 
      e.TextFormat &= ~TextFormatFlags.HidePrefix; 
      base.OnRenderItemText(e); 
     } 
    } 
} 

Và sau đó trong Form với MenuStrip, trong constructor bạn thiết lập các renderer:

public YourFormConstructor() 
{ 
    InitializeComponents(); 
    menuStripName.Renderer = new CustomMenuStripRenderer(); 
} 

Tôi muốn lưu ý rằng nếu bạn muốn có một phong cách hệ thống nhìn của renderering bạn có thể mở rộng lớp ToolStripSystemRenderer thay vì Professional nhưng tôi thích có thể tùy chỉnh bảng màu. Đây là bản sửa lỗi không yêu cầu khách hàng thay đổi cài đặt máy tính của mình. Thưởng thức!

+0

Giải pháp tốt cho vấn đề này. –

+0

Cảm ơn Cris, bạn đã cung cấp chính xác những gì tôi đang tìm kiếm. –

+0

Có thể làm việc như thế nhưng được áp dụng cho các nút lệnh (có thể có phím nóng) không ?? – Diego

0

Đối với câu hỏi tiếp theo liên quan đến này, cụ thể là, việc này để làm việc cho tất cả các ứng dụng phím nóng của bạn:

[DllImport ("user32.dll")] 
static extern void SystemParametersInfo(uint uiAction, uint uiParam, ref 
int pvParam, uint fWinIni); 

const uint SPI_SETKEYBOARDCUES = 0x100B; 

private static void GetAltKeyFixed() 
{ 
//Set pvParam to TRUE to always underline menu access keys, 
int pv = 1; 
/* Call to systemparametersinfo to set true of pv variable.*/ 
SystemParametersInfo(SPI_SETKEYBOARDCUES, 0, ref pv, 0); 
} 

Gọi GetAltKeyFixed trước Application.Run hoặc equiv.

Tôi cần điều này để tuân thủ 508 và hầu như tất cả các câu trả lời về chủ đề này là thay đổi cài đặt Máy tính để bàn Hoặc một "câu hỏi" tại sao bạn muốn làm điều đó? " phản ứng. Đây không phải là yêu cầu điên rồ nhất mà tôi đã nghe.

Các vấn đề liên quan