为什么不可能从一些按钮单击事件调用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()事件从按钮点击事件和按钮按键事件…但是不管用,我该怎么办?还有其他的方法吗?

为什么不可能从一些按钮单击事件调用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();
    }