c#按钮点击EventArgs信息
本文关键字:EventArgs 信息 按钮 | 更新日期: 2023-09-27 18:18:34
当我点击一个按钮在例如一个WinForms应用程序,什么信息被传递到事件方法的EventArgs e ?我只是想知道,因为我使用作为关键字来"转换"e到鼠标事件,以便获得单击按钮的点的坐标。
编辑:在下面的示例中,我可以将变量e转换为MouseEventArgs类型的对象,并且我想知道可以将e转换为哪些其他类型的事件参数。
private void someEvent(object sender, EventArgs e)
{
int xCoord = (e as MouseEventArgs).X;
}
这取决于事件,大多数winforms事件的底层windows消息没有这样的概念,所以无论在哪里创建EventArgs将决定它包含的类型和信息。它可以是来自框架的东西,或者你可以从EventArgs中派生出你自己的类。
在.Net4.5之后,它甚至不需要从EventArgs中派生
您应该使用System.Windows.Forms.Cursor.Position
: "表示光标在屏幕坐标中的位置的点。"
有两个参数:一个sender和一个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;
}
我使用as关键字将e"转换"为鼠标事件
别这么做。为什么?
因为如果有人使用键盘(tab + Enter)或按钮。调用PerformClick来触发按钮,转换将失败,您的:
MouseEventArgs mouseArgs = e as MouseEventArgs ;
if (mouseArgs.MouseButton == MouseButton.Left) ...
将导致NullReferenceException
。
你不能保证OnClick
事件中的EventArgs e
将是MouseEventArgs。这只是最常见的情况,但不是唯一可能的情况。
注::因为它已经被@terribleProgrammer指向了,你可以使用Cursor。位置静态属性以更独立和健壮的方式获取当前光标位置。
但是,如果光标信息只有在按钮被鼠标触发时才有意义,那么您将不得不小心处理可能的转换失败:
MouseEventArgs mouseArgs = e as MouseEventArgs ;
if (mouseArgs == null)
{
Logger.Log("mouseArgs is null");
return;
}
if (mouseArgs.MouseButton == MouseButton.Left) ...
编辑:有三种主要的方法来引发事件和三个相应的eventArgs类:
- 使用鼠标-
MouseEventArgs
- 使用键盘-
KeyEventArgs
- 使用
PerformClick
方法-我不确定,但它可能只是普通的EventArgs
(验证只是以这种方式提出它,并看看e.GetType())。 - 是否有其他情况会提高它,我不知道。MSDN不能用于此类请求。
p.s. 1。:我想再重复一遍-不要假设e
参数将是某种特定类型。Windows窗体API甚至不能保证e将包含一些具体有用的EventArgs
派生类