请解释。
在第3行中,我不知道为什么使用类按钮强制转换发件人对象,
发送方对象如何在第3行中起作用
在第3行中使用Button类的原因是什么?
1. private void button_Click(object sender, EventArgs e)
2. {
3. Button btn = (Button) sender;
4. textBox1.Text = textBox1.Text + btn.Text;
5. }
最佳答案
从声明中可以看到
private void button_Click(object sender, EventArgs e)
唯一的保证是
sender
是object
类型;并且object
实例没有Text
属性private void button_Click(object sender, EventArgs e) {
// sender.Text doesn't compile - sender being Object doesn't have Text property
textBox1.Text = textBox1.Text + sender.Text;
}
因此,您已强制转换为具有
Text
属性的类型,这是Control的最准确方法:private void button_Click(object sender, EventArgs e) {
// Control: Button, TextBox, Panel etc.
Control ctrl = sender as Control;
// If we succeed in cast (i.e. sender is a Control)
if (ctrl != null)
textBox1.Text = textBox1.Text + ctrl.Text;
}
当显式强制转换为
Button
Button btn = (Button) sender; // dangerous code
可能很危险:例如,您可能想在不检查转换结果的情况下添加
myPanel.Click += button_Click
(将myPanel
作为Button
进行处理)。关于c# - Windows窗体强制转换Button类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41220681/