为什么不可能从一些按钮单击事件调用textBox1_KeyPress()事件
本文关键字:事件 textBox1 调用 KeyPress 单击 不可能 按钮 为什么 | 更新日期: 2023-09-27 18:12:12
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btn0_Click(object sender, EventArgs e)
{
MessageBox.Show("called btn 0 click..");
KeyPressEventArgs e0 = new KeyPressEventArgs('0');
textBox1_KeyPress(sender, e0);
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
MessageBox.Show("called txtbox_keypress event...");
}
}
很抱歉,如果这是一个愚蠢的问题,我刚刚开始学习windows窗体,我仍然发现网上的材料令人困惑。我想实现计算器。所以当数字按钮被按下时,它应该被填充在文本框中。所以我认为调用textBox1_keypress()事件从按钮点击事件将工作??但是它不工作,
我可以手动编写按钮单击事件的逻辑,以填写文本框中的文本,但如果我这样做,我必须在button1_KeyPress事件也做同样的事情。所以这将是代码的重复,对吗?所以我认为解决方案是调用textBox1_KeyPress()事件从按钮点击事件和按钮按键事件…但是不管用,我该怎么办?还有其他的方法吗?
所以这是代码的重复,对吗??
是的,它会是。所以你可以输入
private void btn0_Click(object sender, EventArgs e)
{
CommonMethod(e);
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
CommonMethod(e);
}
private void CommonMethod(EventArgs e)
{
//Your logic here.
}
TextBox KeyPress
事件处理程序(textBox1_KeyPress
)在用户按下一个键后称为。KeyPressEventArgs
参数包含按下的键等信息。所以从你的btn0_Click
方法调用它不会为TextBox设置文本。
相反,您希望(可能)将用户按下的任何数字附加到TextBox中已经存在的文本上。就像
private void btn0_Click(object sender, EventArgs e)
{
textBox1.Text += "0";
}
可能更接近你想要完成的目标。
您可以像这样将逻辑放在一个额外的函数中:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btn0_Click(object sender, EventArgs e)
{
NumberLogic(0),
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// I don't know right now if e contains the key pressed. If not replace by the correct argument
NumberLogic(Convert.ToInt32(e));
}
void NumberLogic(int numberPressed){
MessageBox.Show("Button " + numberPressed.ToString() + " pressed.");
}
}
你可不想把这些事件像那样绑在一起。
按键是一回事,用一种方式处理。
一个按钮点击是完全不同的,应该这样处理。
基本原因是,
按钮不知道它是什么数字,你需要告诉它。另一方面,按下一个键,就知道按了哪个数字。
如果你真的想,出于某种原因,你可以使用SendKeys从按钮以一种迂回的方式触发你的按键事件。
SendKeys.SendWait("0");
我可以建议你使用按钮的标签属性。将设计模式或构造函数中每个按钮的值放入其中,为所有按钮创建一个按钮事件处理程序,并使用标签值:
构造函数: button1.Tag = 1;
button2.Tag = 2;
button1.Click += buttons_Click;
button2.Click += buttons_Click;
事件hadler: private void buttons_Click(object sender, EventArgs e)
{
textBox1.Text = ((Button)sender).Tag.ToString();
}