Trong ứng dụng C# của tôi, tôi muốn hiển thị menu ngữ cảnh, nhưng tôi muốn thêm các tùy chọn đặc biệt vào menu nếu phím SHIFT đang được giữ khi bối cảnh menu được mở.C# - Phát hiện nếu phím SHIFT được giữ khi mở menu ngữ cảnh
Tôi hiện đang sử dụng API GetKeyState
để kiểm tra khóa SHIFT. Nó hoạt động tốt trên máy tính của tôi nhưng người dùng với Windows không phải tiếng Anh nói rằng nó không làm việc ở tất cả cho họ.
Tôi cũng đọc điều đó trong API Win32 khi một menu ngữ cảnh được mở ra có một lá cờ cho biết trong trình đơn sẽ hiển thị EXTENDEDVERBS
. Trong C# EventArgs
cho sự kiện Opening
không chứa (từ những gì tôi có thể biết) một thuộc tính cho biết EXTENDEDVERBS
hoặc nếu bất kỳ phím bổ trợ nào được nhấn.
Dưới đây là đoạn code tôi đang sử dụng hiện đang nằm trong sự kiện "Opening
":
// SHIFT KEY is being held down
if (Convert.ToBoolean(GetKeyState(0x10) & 0x1000))
{
_menuStrip.Items.Add(new ToolStripSeparator());
ToolStripMenuItem log = new ToolStripMenuItem("Enable Debug Logging");
log.Click += new EventHandler(log_Click);
log.Checked = Settings.Setting.EnableDebugLogging;
_menuStrip.Items.Add(log);
}
Nếu GetKeyState là đúng cách để làm việc đó, là mã của tôi đúng phát hiện phím SHIFT bị ép?
Thật không may, cha mẹ của ContextMenu trong mã của tôi là một UserControl và thuộc tính ModifierKeys không khả dụng cho UserContr ol hoặc đối tượng ContextMenu. –
@Chris - Như Jared nói nó tĩnh. Tôi đã cập nhật câu trả lời của mình bằng một liên kết đến msdn –
Tôi không nhận thấy điều đó. Tôi đã nghĩ rằng đó là một tài sản cá thể. Tôi sẽ kiểm tra nó. –