Control vControl = sender as Control;用法

.Net技术 码拜 8年前 (2016-06-03) 1326次浏览
 private void Label_MouseDown_1(object sender, MouseButtonEventArgs e)
{
Control vControl = sender as Control;
PageData = vControl.DataContext as MonitorInput;
RefreshForm();
}
private void bt_Remove_Click(object sender, RoutedEventArgs e)
{
List.Remove(PageData);
if (List.Count == 0)
{
PageData = null;
this.Close();
}
}
本人想问问高手们  Control vControl = sender as Control;是什么意思,有什么作用,为什么这么写?第二个bt_Remove_Click事件为什么不用这么写?能不能详细的讲一下
解决方案

50

引用:
Quote: 引用:

sender是object类型
假如不用as转换,那么Control vControl = sender报编译错误。
假如用object  vControl = sender,不报错,但是不能调用Control有,但是object没有的成员,例如Text属性等等。
除了可以写
sender as Control
还可以写
(Control)sender

本人是不知道什么时候转换什么时候不转换,看一下本人上面提的同样是事件,Label_MouseDown_1需要转换,textBox_KeyDown就不需要?为什么那

private void textBox1_KeyDown(object sender, KeyEventArgs e)         {

if (e.KeyCode == Keys.Enter)
{
textBox1.Text = “I have finished”;
}
}
这里改变textBox1的值而不是用sender原因是你能够拿到textBox的ID,也就是 textBox1。并且你把上面的函数改成
private void textBox1_KeyDown(object sender, KeyEventArgs e)         {

if (e.KeyCode == Keys.Enter)
{
TextBox tb=sender as TextBox();
tb.Text = “I have finished”;
}
}
效果是一样的。
再说什么时候需要转换:当你不知道是界面上哪一个控件触发这个事件的时候,也就是你不能确定控件的ID的时候,就需要转换。一个场景:
计算器里面有1-9个数字,每一个数字都是一个Button,但我们不会为每一个Button绑定一个click事件,也就是全部的Button的click事件是同一个,暂时就用你写的那个 :private void Label_MouseDown_1(object sender, MouseButtonEventArgs e)。
那么是界面上哪一个Button触发的这个事件,不清楚,但是又要将Button上的数字取出来,就需要用到转换,例如:
private void Label_MouseDown_1(object sender, MouseButtonEventArgs e)
{
Button btn=sneder as button,
string number = btn.Text; //知道是1-9个按钮中的某一个,但是不知道具体是哪一个,将Button上的数字取出来

}


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Control vControl = sender as Control;用法
喜欢 (0)
[1034331897@qq.com]
分享 (0)