Form.KeyPreview 属性

Form.KeyPreview 属性

今天再做KeyDown 和 KeyUp 事件时,就是忘了设置,窗体的KeyPreview 属性,所以KeyDown 和 KeyUp 事件没有反应(这里说明一下,本人使用的是自定义控件,如果是窗体控件就没有问题的。具体原因,下面会有解释。)

获取或设置一个值,该值指示在将键事件传递到具有焦点的控件前,窗体是否将接收此键事件。

命名空间:System.Windows.Forms
程序集:System.Windows.Forms(在 system.windows.forms.dll 中)

语法

public bool KeyPreview { get; set; }

J#

/** @property */
public boolean get_KeyPreview ()

/** @property */
public void set_KeyPreview (boolean value)

JScript

public function get KeyPreview () : boolean

public function set KeyPreview (value : boolean)

属性值

如果窗体将接收所有键事件,则为 true;如果窗体上当前选定控件接收键事件,则为 false。默认为 false

备注

当此属性设置为 true 时,窗体将接收所有 KeyPressKeyDown 和 KeyUp 事件。在窗体的事件处理程序处理完该击键后,然后将该击键分配给具有焦点的控件。例如,如果 KeyPreview 属性设置为 true,而且当前选定的控件是 TextBox,则在窗体的事件处理程序处理了击键后,TextBox 控件将接收所按的键。要仅在窗体级别处理键盘事件并且不允许控件接收键盘事件,请将窗体的 KeyPress 事件处理程序中的KeyPressEventArgs.Handled 属性设置为 true

可以使用此属性处理应用程序中的大部分击键事件,并可以处理击键事件或调用适当的控件来处理击键事件。例如,当应用程序使用功能键时,可能希望在窗体级别处理这些击键,而不是为可能接收击键事件的每个控件编写代码。

注意

如果窗体没有可见或启用的控件,则该窗体自动接收所有键盘事件。

注意

可以对窗体上的控件进行编程,以取消它所接收的任何击键。由于控件从不向窗体发送这些击键,因此无论 KeyPreview 为何种设置,窗体永远都无法看到它们。

示例

下面的代码示例演示如何将窗体的 KeyPreview 属性设置为 true 以及如何处理窗体级别的键事件。要运行该示例,请将以下代码粘贴到一个空白窗体中。

C++

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 );
}
时间: 2024-12-22 21:14:56

Form.KeyPreview 属性的相关文章

Form.KeyPreview 属性2

在使用.Net Framework编写窗体应用程序的时候,有时有需要响应窗体的按键消息. 当窗体上没有任何其他控件的时候,窗体是可以直接响应这些消息的. 但是当窗体上有其他控件时,会发现窗体再也不会响应这些消息了,因为这些消息都由其上的控件所处理掉并且不再发给父窗体. 但是响应窗体上的按键消息是很有必要的,经一番探索,发现Form类有一个KeyPreview的属性,可以让它接收得到按键消息.它的定义如下: KeyPreview的属性 获取或设置一个值,该值指示在将键事件传递到具有焦点的控件前,窗

Form类的KeyPreview属性

首先需要知道一个知识点,Form控件,Panel控件和GroupBox控件等容器类控件默认是不接收焦点的,而是负责管理容器中控件的焦点.当容器控件被选中时,默认把焦点传送至容器内Tab顺序为0的控件. 当Form窗体中包含可以接收焦点和键盘事件的控件时,如TextBox,如果KeyPreview属性设置为false(默认值),那么Form类是不响应键盘消息的,消息被直接发送至拥有焦点的控件.如果需要在控件接收键盘事件前对键盘事件(KeyPress,KeyDown,KeyUp)进行处理,便需要将K

窗体的keypreview属性的作用是什么?(设置快捷键和钩子)

如果把窗体的KeyPreview属性设为True,那么窗体将比其内的控件优先获得键盘事件的激活权.比如窗体Form1和其内的文本框Text1都准备响应KeyPress事件,那么以下代码将首先激活窗体的KeyPress事件: Private Sub Form_Load() Me.KeyPreview = TrueEnd Sub Private Sub Form_KeyPress(KeyAscii As Integer) MsgBox "这是窗体的KeyPress事件"End Sub Pr

Ext文本输入框:Ext.form.TextField属性汇总(转) (

本章介绍Ext.form.TextField组件的基本用法: <form id="form1" runat="server">    <div>    <div id="Bind_TextField"></div>    <br />    <div id="Bind_Button"></div>    <script type=&quo

IE和FireFox 对FORM enctype属性的认识存在差异

IE和FireFox 对FORM enctype属性的认识存在差异,一般来说对于动态创建的form,如果因为要上传文件的原因很自然的会使用类似如下的代码: 1  //create form 2  this.form = document.createElement("FORM");3  this.form.id = "jasonUploadForm";4  this.form.name = "jasonUploadForm";5  this.fo

Form 详细属性--2016年12月4日

属性   名称 说明 AcceptButton 获取或设置当用户按 Enter 键时所单击的窗体上的按钮. AccessibilityObject 获取分配给该控件的 AccessibleObject.(继承自 Control.) AccessibleDefaultActionDescription 获取或设置控件的默认操作说明以供具有辅助功能的客户端应用程序使用.(继承自 Control.) AccessibleDescription 获取或设置辅助功能客户端应用程序使用的控件说明.(继承自 

HTML5 Web Form 新增属性和表单验证

<form>标签的基本属性 1 method属性:指定浏览器向服务器传送数据的方式,可选: 2 action属性:设置服务器接受和处理表单数据的URL: 3 enctype属性:制定表单数据在发送到服务器之前进行编码的编码方式: 4 accept属性:指定能够通过文件上传进行提交的文件类型: 5 accept-charset属性:指定服务器处理表单数据所接收的字符集: 6 target属性:制定浏览器在提交表单后生成的页面在哪个框加载或在哪个窗口显示: 7 id属性:用来识别网页中的form标

HTML form enctype 属性试验

HTML form enctype http://www.w3.org/TR/html401/interact/forms.html#h-17.13.1%E2%80%8D enctype= content-type [CI] This attribute specifies the content type used to submit the form to the server (when the value of method is "post"). The default va

Ext文本输入框:Ext.form.TextField属性汇总

本章介绍Ext.form.TextField组件的基本用法: <form id="form1" runat="server">    <div>    <div id="Bind_TextField"></div>    <br />    <div id="Bind_Button"></div>    <script type=&quo