Form.KeyPreview Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získá nebo nastaví hodnotu určující, zda formulář obdrží klíčové události před předáním události ovládacímu prvku, který má fokus.
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
Hodnota vlastnosti
true pokud formulář obdrží všechny klíčové události; false pokud aktuálně vybraný ovládací prvek ve formuláři obdrží klíčové události. Výchozí hodnota je false.
Příklady
Následující příklad ukazuje nastavení vlastnosti formuláře KeyPreview na true a zpracování klíčových událostí na úrovni formuláře. Pokud chcete spustit příklad, vložte následující kód do prázdného formuláře.
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
Poznámky
Pokud je tato vlastnost nastavena na true, formulář obdrží všechny KeyPressKeyDown, a KeyUp události. Jakmile obslužné rutiny událostí formuláře dokončí zpracování stisknutí kláves, je stisknutí klávesy přiřazeno ovládacímu prvku s fokusem. Pokud je například KeyPreview vlastnost nastavena true a aktuálně vybraný ovládací prvek je TextBox, po stisknutí klávesy obslužné rutiny události formuláře TextBox ovládací prvek obdrží stisknutou klávesu. Chcete-li zpracovávat události klávesnice pouze na úrovni formuláře a nepovolit ovládací prvky přijímat události klávesnice, nastavte KeyPressEventArgs.Handled vlastnost v obslužné rutině KeyPress události formuláře na true.
Tuto vlastnost můžete použít ke zpracování většiny klávesových úhozů v aplikaci a zpracování stisknutí kláves nebo volání příslušného ovládacího prvku pro zpracování stisknutí kláves. Pokud například aplikace používá funkční klávesy, můžete místo psaní kódu pro každý ovládací prvek, který může přijímat události stisknutí kláves, zpracovávat klávesy na úrovni formuláře.
Poznámka:
Pokud formulář nemá žádné viditelné nebo povolené ovládací prvky, automaticky obdrží všechny události klávesnice.
Poznámka:
Ovládací prvek formuláře může být naprogramován tak, aby zrušil všechny stisknutí kláves, které obdrží. Vzhledem k tomu, že ovládací prvek nikdy neodesílá tyto stisknutí kláves do formuláře, formulář je nikdy neuvidí bez ohledu na nastavení KeyPreview.