为什么不能从某个Button Click事件中调用textBox1_KeyPress()事件。

时间:2014-07-09 11:15:42

标签: c# .net winforms

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()事件...但它不工作。所以我该怎么办? ..还有其他方法,我应该遵循。

5 个答案:

答案 0 :(得分:0)

  

所以它会重复代码吗?

是的,会的。所以你可以做到

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.
}

答案 1 :(得分:0)

TextBox KeyPress事件处理程序(textBox1_KeyPress)在用户按下某个键后被称为KeyPressEventArgs参数包括诸如按下了什么键之类的信息。因此,从btn0_Click方法调用它不会设置TextBox的文本。

相反,您希望(可能)将用户按下的任何数字附加到TextBox中已存在的文本中。像

这样的东西
private void btn0_Click(object sender, EventArgs e)
{
    textBox1.Text += "0";
}

可能更接近你想要完成的事情。

答案 2 :(得分:0)

你不想像这样把事件捆绑在一起 按键是一回事,以一种方式处理 点击按钮是完全不同的,应该按原样处理。

基本原因是这个,
按钮不知道它是什么号码,你需要告诉它。 另一方面,按键,知道按下了什么号码。

如果您出于某种原因,您真的希望could use SendKeys通过按钮以圆周方式触发您的按键事件。

SendKeys.SendWait("0");

答案 3 :(得分: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.");
    }    
}

答案 4 :(得分: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();
    }