Form.KeyPreview 屬性
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
取得或設定值,指出表單是否要在事件傳送至焦點所在的控制項之前,接收按鍵事件。
public:
property bool KeyPreview { bool get(); void set(bool value); };
public bool KeyPreview { get; set; }
member this.KeyPreview : bool with get, set
Public Property KeyPreview As Boolean
屬性值
如果表單將接收所有按鍵事件,則為 true
;如果表單上目前選取的控制項將接收按鍵事件,則為 false
。 預設為 false
。
範例
下列範例示範如何將表單的 KeyPreview 屬性設定為 true,並在表單層級處理索引鍵事件。 若要執行範例,請將下列程式碼貼到空白表單中。
using namespace System::Windows::Forms;
// This button is a simple extension of the button class that overrides
// the ProcessMnemonic method. If the mnemonic is correctly entered,
// the message box will appear and the click event will be raised.
// This method makes sure the control is selectable and the
// mnemonic is correct before displaying the message box
// and triggering the click event.
public ref class MyMnemonicButton: public Button
{
protected:
bool ProcessMnemonic( char inputChar )
{
if ( CanSelect && IsMnemonic( inputChar, this->Text ) )
{
MessageBox::Show( "You've raised the click event "
"using the mnemonic." );
this->PerformClick();
return true;
}
return false;
}
};
// Declare the controls contained on the form.
public ref class Form1: public System::Windows::Forms::Form
{
private:
MyMnemonicButton^ button1;
public private:
System::Windows::Forms::ListBox^ ListBox1;
public:
Form1()
: Form()
{
// Set KeyPreview object to true to allow the form to process
// the key before the control with focus processes it.
this->KeyPreview = true;
// Add a MyMnemonicButton.
button1 = gcnew MyMnemonicButton;
button1->Text = "&Click";
button1->Location = System::Drawing::Point( 100, 120 );
this->Controls->Add( button1 );
// Initialize a ListBox control and the form itself.
this->ListBox1 = gcnew System::Windows::Forms::ListBox;
this->SuspendLayout();
this->ListBox1->Location = System::Drawing::Point( 8, 8 );
this->ListBox1->Name = "ListBox1";
this->ListBox1->Size = System::Drawing::Size( 120, 95 );
this->ListBox1->TabIndex = 0;
this->ListBox1->Text = "Press a key";
this->ClientSize = System::Drawing::Size( 292, 266 );
this->Controls->Add( this->ListBox1 );
this->Name = "Form1";
this->Text = "Form1";
this->ResumeLayout( false );
// Associate the event-handling method with the
// KeyDown event.
this->KeyDown += gcnew KeyEventHandler( this, &Form1::Form1_KeyDown );
}
private:
// The form will handle all key events before the control with
// focus handles them. Show the keys pressed by adding the
// KeyCode object to ListBox1. Ensure the processing is passed
// to the control with focus by setting the KeyEventArg.Handled
// property to false.
void Form1_KeyDown( Object^ /*sender*/, KeyEventArgs^ e )
{
ListBox1->Items->Add( e->KeyCode );
e->Handled = false;
}
};
[System::STAThreadAttribute]
int main()
{
Application::Run( gcnew Form1 );
}
using System.Windows.Forms;
public class Form1 :
System.Windows.Forms.Form
// Declare the controls contained on the form.
{
private MyMnemonicButton button1;
internal System.Windows.Forms.ListBox ListBox1;
public Form1() : base()
{
// Set KeyPreview object to true to allow the form to process
// the key before the control with focus processes it.
this.KeyPreview = true;
// Add a MyMnemonicButton.
button1 = new MyMnemonicButton();
button1.Text = "&Click";
button1.Location = new System.Drawing.Point(100, 120);
this.Controls.Add(button1);
// Initialize a ListBox control and the form itself.
this.ListBox1 = new System.Windows.Forms.ListBox();
this.SuspendLayout();
this.ListBox1.Location = new System.Drawing.Point(8, 8);
this.ListBox1.Name = "ListBox1";
this.ListBox1.Size = new System.Drawing.Size(120, 95);
this.ListBox1.TabIndex = 0;
this.ListBox1.Text = "Press a key";
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.ListBox1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
// Associate the event-handling method with the
// KeyDown event.
this.KeyDown += new KeyEventHandler(Form1_KeyDown);
}
// The form will handle all key events before the control with
// focus handles them. Show the keys pressed by adding the
// KeyCode object to ListBox1. Ensure the processing is passed
// to the control with focus by setting the KeyEventArg.Handled
// property to false.
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
ListBox1.Items.Add(e.KeyCode);
e.Handled = false;
}
[System.STAThreadAttribute]
public static void Main()
{
Application.Run(new Form1());
}
}
// This button is a simple extension of the button class that overrides
// the ProcessMnemonic method. If the mnemonic is correctly entered,
// the message box will appear and the click event will be raised.
public class MyMnemonicButton : Button
{
// This method makes sure the control is selectable and the
// mneumonic is correct before displaying the message box
// and triggering the click event.
protected override bool ProcessMnemonic(char inputChar)
{
if (CanSelect && IsMnemonic(inputChar, this.Text))
{
MessageBox.Show("You've raised the click event " +
"using the mnemonic.");
this.PerformClick();
return true;
}
return false;
}
}
Imports System.Windows.Forms
Imports System.Security.Permissions
Public Class Form1
Inherits System.Windows.Forms.Form
' Declare the controls contained on the form.
Private WithEvents button1 As MyMnemonicButton
Friend WithEvents ListBox1 As System.Windows.Forms.ListBox
Public Sub New()
MyBase.New()
' Set KeyPreview object to true to allow the form to process
' the key before the control with focus processes it.
Me.KeyPreview = True
' Add a MyMnemonicButton.
button1 = New MyMnemonicButton
button1.Text = "&Click"
button1.Location = New System.Drawing.Point(100, 120)
Me.Controls.Add(button1)
' Initialize a ListBox control and the form itself.
Me.ListBox1 = New System.Windows.Forms.ListBox
Me.SuspendLayout()
Me.ListBox1.Location = New System.Drawing.Point(8, 8)
Me.ListBox1.Name = "ListBox1"
Me.ListBox1.Size = New System.Drawing.Size(120, 95)
Me.ListBox1.TabIndex = 0
Me.ListBox1.Text = "Press a key"
Me.ClientSize = New System.Drawing.Size(292, 266)
Me.Controls.Add(Me.ListBox1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)
End Sub
' The form will handle all key events before the control with
' focus handles them. Show the keys pressed by adding the
' KeyCode object to ListBox1. Ensure the processing is passed
' to the control with focus by setting the KeyEventArg.Handled
' property to false.
Private Sub Form1_KeyDown(ByVal sender As Object, _
ByVal e As KeyEventArgs) Handles MyBase.KeyDown
ListBox1.Items.Add(e.KeyCode)
e.Handled = False
End Sub
<System.STAThreadAttribute()> Public Shared Sub Main()
Application.Run(New Form1)
End Sub
End Class
' This button is a simple extension of the button class that overrides
' the ProcessMnemonic method. If the mnemonic is correctly entered,
' the message box will appear and the click event will be raised.
Public Class MyMnemonicButton
Inherits Button
' This method makes sure the control is selectable and the
' mneumonic is correct before displaying the message box
' and triggering the click event.
<System.Security.Permissions.UIPermission( _
System.Security.Permissions.SecurityAction.Demand, Window:=UIPermissionWindow.AllWindows)> _
Protected Overrides Function ProcessMnemonic( _
ByVal inputChar As Char) As Boolean
If (CanSelect And IsMnemonic(inputChar, Me.Text)) Then
MessageBox.Show("You've raised the click event " _
& "using the mnemonic.")
Me.PerformClick()
Return True
End If
Return False
End Function
End Class
備註
當此屬性設定為 true
時,表單將會收到所有 KeyPress 、 KeyDown 和 KeyUp 事件。 表單的事件處理常式完成按鍵處理之後,按鍵就會指派給具有焦點的控制項。 例如,如果 KeyPreview 屬性設定 true
為 ,而且目前選取的控制項是 TextBox ,在按鍵由控制項的事件處理常式處理之後, TextBox 控制項將會收到按下的按鍵。 若要只在表單層級處理鍵盤事件,且不允許控制項接收鍵盤事件,請將 KeyPressEventArgs.Handled 表單事件處理常式中的 KeyPress 屬性設定為 true
。
您可以使用這個屬性來處理應用程式中大部分的按鍵,並處理按鍵,或呼叫適當的控制項來處理按鍵。 例如,當應用程式使用函式按鍵時,您可能會想要在表單層級處理按鍵,而不是針對可能接收按鍵事件的每個控制項撰寫程式碼。
注意
如果表單沒有可見或已啟用的控制項,它會自動接收所有鍵盤事件。
注意
表單上的控制項可以程式設計為取消它收到的任何按鍵。 由於控制項永遠不會將這些按鍵傳送至表單,因此無論 的設定 KeyPreview 為何,表單都不會看到它們。