C#按钮单击EventArgs e信息

时间:2014-08-18 12:42:53

标签: c# events button

当我点击例如按钮时一个WinForms应用程序,什么信息传递给事件方法的 EventArgs e ?我只是想知道,因为我使用作为关键字"转换" e 指向鼠标事件,以获取点击按钮的点的坐标。

编辑: 在下面的示例中,我可以将变量 e 转换为MouseEventArgs类型的对象,并且我想知道可以转换哪些其他类型的事件参数 e 。 / p>

private void someEvent(object sender, EventArgs e)
{
  int xCoord = (e as MouseEventArgs).X;
}

4 个答案:

答案 0 :(得分:1)

这取决于事件,大多数winforms事件的基础窗口消息没有这样的概念,因此创建EventArgs的地方将决定它包含的类型和信息。它可能是来自框架的东西,或者你可以组成自己的派生自EventArgs的类。

在.Net4.5之后,它甚至不必派生自EventArgs

答案 1 :(得分:1)

你应该使用System.Windows.Forms.Cursor.Position:“一个代表光标在屏幕坐标中位置的点。”

答案 2 :(得分:1)

有两个参数:发件人和EventArgs。发件人是初始化事件的对象。 EventArgs包含有关该事件的其他信息。

来自MSDN

// This example uses the Parent property and the Find method of Control to set 
// properties on the parent control of a Button and its Form. The example assumes 
// that a Button control named button1 is located within a GroupBox control. The  
// example also assumes that the Click event of the Button control is connected to 
// the event handler method defined in the example. 
private void button1_Click(object sender, System.EventArgs e)
{
   // Get the control the Button control is located in. In this case a GroupBox.
   Control control = button1.Parent;
   // Set the text and backcolor of the parent control.
   control.Text = "My Groupbox";
   control.BackColor = Color.Blue;
   // Get the form that the Button control is contained within.
   Form myForm = button1.FindForm();
   // Set the text and color of the form containing the Button.
   myForm.Text = "The Form of My Control";
   myForm.BackColor = Color.Red;
}

答案 3 :(得分:0)

  

我正在使用as关键字将“转换”为鼠标事件

不要这样做。为什么呢?

因为如果有人使用键盘(TABs + Enter)或Button.PerformClick来触发您的按钮,则转换将失败并且您的:

MouseEventArgs mouseArgs = e as MouseEventArgs ;

if (mouseArgs.MouseButton == MouseButton.Left) ...

将导致NullReferenceException

您不能保证EventArgs e事件中的OnClick是MouseEventArgs。这只是最常见的情况,但不是唯一可能的情况。

P.S。:正如@terribleProgrammer已经指出的那样,您可以使用Cursor.Position静态属性以更独立,更健壮的方式获取当前光标位置。

但是如果光标信息只有在按钮被鼠标触发时才有意义,那么您只需要小心并处理可能的转换失败:

MouseEventArgs mouseArgs = e as MouseEventArgs ;

if (mouseArgs == null)
{
    Logger.Log("mouseArgs is null");
    return;
}    

if (mouseArgs.MouseButton == MouseButton.Left) ...

修改

有三种主要方法可以引发事件,还有三种相应的eventArgs类:

  1. 使用鼠标 - MouseEventArgs
  2. 使用键盘 - KeyEventArgs
  3. 使用PerformClick方法 - 我不确定,但它可能只是简单EventArgs(以验证只是以这种方式提升它并看一下e.GetType())。
  4. 是否有任何其他情况会引发它,我不知道。 MSDN对此类请求没有用处。
  5. P.S.1。:我想再次重复 - 不要假设e参数属于某种特定类型。 Windows Forms API甚至不保证e将包含一些具体有用的EventArgs派生类。