修饰符'private'对C#中的此项无效

时间:2012-05-15 19:38:56

标签: c# keydown

它给了我这样的错误,我似乎无法解决问题所在。

private void Form1.KeyDown(object sender, KeyEventArgs e)  // **THE ERROR HERE**   
    {
        if (ListBox1.Items.Contains(e.KeyCode))
        {
            ListBox1.Items.Remove(e.KeyCode);
            ListBox1.Refresh();
            if (timer1.Interval > 400)
            {

                timer1.Interval -= 10;
            }
            if (timer1.Interval > 250)
            {
                timer1.Interval -= 7;

            }
            if (timer1.Interval > 100)
            {
                timer1.Interval -= 2;

            }
            difficultyProgressBar.Value = 800 - timer1.Interval;
            stats.Update(true);


        }
        else
        {

            stats.Update(false);

        }


        correctLabel.Text = "Correct: " + stats.correct;
        missedLabel.Text = "Missed: " + stats.missed;
        totalLabel.Text = "Total: " + stats.total;
        accuracyLabel.Text = "Accuracy: " + stats.accuracy + "%";


    }

这是一些教程的代码,所以应该可以正常工作。可能是什么问题?

4 个答案:

答案 0 :(得分:6)

你的第一行应该是这样的:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    ...
}

没有圆点。

dot使编译器认为您引用了表单的KeyDown事件,而您只需要一个侦听该事件的方法。

答案 1 :(得分:3)

Interfacename.methodname语法保留用于显式接口实现。接口只包含公共方法,因此“私有”是非法的。

答案 2 :(得分:1)

在VB中,当你声明一个事件处理程序时,你可以使用Handles <Class>.<Event>并自动为你提供所有内容。在C#中,事件处理程序只是附加到事件的方法。因此,您应该将方法名称重命名为Form1_KeyDown。但是,您仍然需要将其挂钩(通过Visual Studio Designer或代码)。

public class Form1 : Form
{
    ...
    public Form1()
    {
        InitializeComponent();
        this.KeyDown += new KeyEventHandler(this.Form1_KeyDown);
    }
    ...
    private void Form1_KeyDown(object sender, KeyEventArgs e) { ... }
}

答案 3 :(得分:0)

我刚刚收到此错误,发现我在标记方法上方的代码中缺少一个右括号。坏括号对搞乱了私有bool方法的识别...