-1

环境:c#.net VS 2010

解决方案有以下两个项目:

  • 我添加了几个经过测试的方法的 dll。

  • 一个测试项目

测试项目中唯一的东西是带有以下代码的表单:(为便于阅读而更改了名称)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using DLL_PROJECT; //Yes I remembered to include the dll project

namespace DLL_PROJECT_Test
{
public partial class frmTest : Form
{
    private Class_1 myClass_1; //this comes from the dll - no errors here
    private Class_2 myClass_2 = new Class_2(); // no errors here either

    public frmTest()
    {
        InitializeComponent();
        //TransparencyKey = BackColor;
        this.SetStyle(System.Windows.Forms.ControlStyles.SupportsTransparentBackColor, true);
        this.BackColor = System.Drawing.Color.FromArgb(0, System.Drawing.Color.Black);
        myDebouncer = new Debouncer(this);
        this.SetDragging(true); //THIS EXTENSION COMES FROM THE DLL AND WORKS FINE
        this.RoundCorners(40, 80); //AS DOES THIS ONE
        myClass_2 = new Class_2();
        myClass_2.HoldStartEvent += new Class_2EventHandler(myClass_2_HoldStartEvent);
        myClass_2.DragStartEvent += new Class_2EventHandler(myClass_2_DragStartEvent);
    }

    private void myClass_2_DragStartEvent(Class_2 sender)
    {
        myClass_2("DragStart") += 1; //THE ONLY ERROR IS HERE AS FOLLOWS
//ERROR: "The name 'myClass_2' does not exist in the current context"
//     - Yes, the DLL is included
//     - Yes, the project is .Net 4 (not client profile)
//     - Yes xxx WRONG xxx, this exact syntax has been tested before on an instance of
//       this class, it's just a default parameter.
// xxx should be [] instead of () for the indexer in c#.  #VB_Fails
    }

    void myClass_2_HoldStartEvent(Class_2 sender)
    {
        this.Close();
    }
}
}
4

1 回答 1

2

这段代码:

myClass_2("DragStart") += 1;

... 就myClass_2好像它是方法的名称委托实例的名称一样使用。

你真的是想使用索引器吗?那将是:

myClass_2["DragStart"] += 1;

这里是什么"DragStart"意思?它实际上是一个属性名称吗?也许你想要:

myClass_2.DragStart += 1;

我非常怀疑“这种确切的语法之前已经在此类的实例上进行过测试”。

诚然,在这种情况下,错误消息没有多大意义。我认为实际上更有可能您的真实代码中有错字 - 因为您更改了名称,所以这里没有传播错字。如果您可以在一个简短但完整的程序中重现这一点,它将使生活变得更加简单。

于 2013-01-03T16:08:23.717 回答