Form.KeyPreview Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ruft einen Wert ab, der angibt, ob das Formular Tastaturereignisse empfängt, bevor das Ereignis an das Steuerelement übergeben wird, das den Fokus besitzt, oder legt diesen fest.
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
Eigenschaftswert
true
, wenn das Formular alle Tastaturereignisse empfängt. false
, wenn das momentan ausgewählte Steuerelement im Formular Tastaturereignisse empfängt. Der Standardwert ist false
.
Beispiele
Im folgenden Beispiel wird das Festlegen der Eigenschaft eines Formulars KeyPreview auf TRUE und die Behandlung der Schlüsselereignisse auf Formularebene veranschaulicht. Fügen Sie zum Ausführen des Beispiels den folgenden Code in ein leeres Formular ein.
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
Hinweise
Wenn diese Eigenschaft auf true
festgelegt ist, empfängt das Formular alle KeyPressEreignisse , KeyDownund KeyUp . Nachdem die Ereignishandler des Formulars die Verarbeitung der Tastatureingabe abgeschlossen haben, wird die Tastatureingabe dem Steuerelement mit Fokus zugewiesen. Wenn die KeyPreview -Eigenschaft beispielsweise auf true
festgelegt ist und das aktuell ausgewählte Steuerelement ein TextBoxist, erhält das Steuerelement die gedrückte Taste, nachdem die Tastatureingabe von den Ereignishandlern des Formulars TextBox behandelt wurde. Legen Sie KeyPressEventArgs.Handled die -Eigenschaft im Ereignishandler Ihres Formulars KeyPress auf true
fest, um Tastaturereignisse nur auf Formularebene zu behandeln und nicht zuzulassen, dass Steuerelemente Tastaturereignisse empfangen.
Sie können diese Eigenschaft verwenden, um die meisten Tastatureingaben in Ihrer Anwendung zu verarbeiten und entweder die Tastatureingabe zu behandeln oder das entsprechende Steuerelement zum Behandeln der Tastatureingabe aufzurufen. Wenn eine Anwendung beispielsweise Funktionstasten verwendet, sollten Sie die Tastatureingaben auf Formularebene verarbeiten, anstatt Code für jedes Steuerelement zu schreiben, das Möglicherweise Tastatureingabeereignisse empfängt.
Hinweis
Wenn ein Formular über keine sichtbaren oder aktivierten Steuerelemente verfügt, empfängt es automatisch alle Tastaturereignisse.
Hinweis
Ein Steuerelement auf einem Formular kann so programmiert werden, dass es alle Tastatureingaben abbricht, die es empfängt. Da das Steuerelement diese Tastatureingaben nie an das Formular sendet, werden sie im Formular nie angezeigt, unabhängig von der Einstellung von KeyPreview.