Form.KeyPreview Propriedade

Definição

Obtém ou define um valor que indica se o formulário receberá eventos importantes antes que o evento seja passado para o controle que tem o foco.

public bool KeyPreview { get; set; }

Valor da propriedade

true se o formulário receber todos os principais eventos; false se o controle selecionado no momento no formulário receber os principais eventos. O padrão é false.

Exemplos

O exemplo a seguir demonstra a configuração da propriedade de KeyPreview um formulário como true e o tratamento dos principais eventos no nível do formulário. Para executar o exemplo, cole o código a seguir em um formulário em branco.

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;
    }
}

Comentários

Quando essa propriedade for definida como true, o formulário receberá todos os KeyPresseventos , KeyDowne KeyUp . Depois que os manipuladores de eventos do formulário tiverem concluído o processamento do pressionamento de teclas, o pressionamento de teclas será atribuído ao controle com foco. Por exemplo, se a KeyPreview propriedade estiver definida true como e o controle selecionado no momento for um TextBox, depois que o pressionamento de teclas for manipulado pelos manipuladores de eventos do formulário, o TextBox controle receberá a tecla que foi pressionada. Para manipular eventos de teclado somente no nível do formulário e não permitir que os controles recebam eventos de teclado, defina a KeyPressEventArgs.Handled propriedade no manipulador de eventos do KeyPress formulário como true.

Você pode usar essa propriedade para processar a maioria dos pressionamentos de tecla em seu aplicativo e manipular o pressionamento de tecla ou chamar o controle apropriado para lidar com o pressionamento de tecla. Por exemplo, quando um aplicativo usa chaves de função, talvez você queira processar os pressionamentos de tecla no nível do formulário em vez de escrever código para cada controle que possa receber eventos de pressionamento de tecla.

Observação

Se um formulário não tiver controles visíveis ou habilitados, ele receberá automaticamente todos os eventos de teclado.

Observação

Um controle em um formulário pode ser programado para cancelar os pressionamentos de tecla recebidos. Como o controle nunca envia esses pressionamentos de tecla para o formulário, o formulário nunca os verá independentemente da configuração de KeyPreview.

Aplica-se a

Produto Versões
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10

Confira também