2017-03-02 73 views
2

我在后端创建了很多按钮,所以我认为将它抽象出来以减少代码行是明智的。当我尝试这样做时,它给了我一个错误,指出“在本范围内不能声明名为”buttonName“的本地或参数,因为该名称在封闭的本地范围中用于定义本地或参数”。我在这里错过了什么吗?我认为这是在这种情况下使用参数的确切原因。为什么我不能使用参数字符串来命名我的按钮?

这是我想要做的一个例子。

反过来,这

Button buttonDetailsEdit = new Button(); 
buttonDetailsEdit.ID = "ButtonDetailsEdit"; 
buttonDetailsEdit.Text = "Edit"; 
buttonDetailsEdit.UseSubmitBehavior = false; 
buttonDetailsEdit.Click += new EventHandler(EditCall); 
PlaceHolderDetailsContent.Controls.Add(buttonDetailsEdit); 

Button buttonDetailsBack = new Button(); 
buttonDetailsBack.ID = "ButtonDetailsBack"; 
buttonDetailsBack.Text = "Back to List"; 
buttonDetailsBack.UseSubmitBehavior = false; 
buttonDetailsBack.Click += new EventHandler(IndexCall); 
PlaceHolderDetailsContent.Controls.Add(buttonDetailsBack); 

进入这个(与地方的旧代码的方法调用)

void CreateButton(string buttonName, string buttonIDText, string buttonText, PlaceHolder PlaceHolderName, string methodCall) 
{ 
    Button buttonName = new Button(); 
    buttonName.ID = buttonIDText; 
    buttonName.Text = buttonText; 
    buttonName.UseSubmitBehavior = false; 
    buttonName.Click += new EventHandler(methodCall); 
    PlaceHolderName.Controls.Add(buttonName); 
} 

的methodCall部分也是在这里抛出一个错误,我假设因“ methodCall“在这个例子中不存在。

+0

看看'IndexCall'在你的工作代码的类型... – Habib

+0

“的methodCall部分也是在这里抛出一个错误” - 所以有什么错误?相同的错误,或不同的? –

+0

为什么你总是调用你的'Button'局部变量'buttonName'?当然'按钮'会更合适,以及避免这个问题。目前还不清楚编译器的错误信息在哪里不清楚......它告诉你*确切*出了什么问题。 –

回答

7

在同一范围内,不能有两个变量string buttonNameButton buttonName具有相同的名称。

尝试重命名你的按钮,例如,Button newButton

+2

您将变量名称与'Button'类的'Name'属性相混淆。 –

+0

啊我现在明白了。既然它已经在参数中声明了,我不必在方法中声明它,对吗?所以我可以放弃按钮部分,并保持buttonName = new Button(); – Nick

+0

我相信你的预编辑答案更好。这仍然需要2行,我认为在调用它时。一个声明按钮,一个调用它,对吧?所以它应该看起来像这样 Button buttonBack = new Button();创建按钮(buttonBack,“buttonBackId”,“返回列表”,TBNewDescrip,IndexCall); CreateButton – Nick

2

您声明了一个名为buttonName参数:

string buttonName 

您已声明同名的Button变量:

Button buttonName 

你不能同时拥有两者。这是编译器所抱怨的。


现在,实际上,您的问题似乎是要使用的参数内容作为一个局部变量名。这通常是不可能的 - 在编译时必须知道变量名称,而不仅仅是在运行时。

幸运的是,你实际上并不需要 - 在你的方法中调用变量的地方Button并不重要,因为这个名字在方法结束时会丢失(实际上,它甚至可能不会通过编译)。重要的部分是,每次调用您的方法时,都会创建一个新的 实例(并最终添加到列表中)。

因此,只需将您的Button变量重命名为newButton并删除buttonName参数,因为它不再使用。

-1

变量名称buttonName被重复使用,并且methodCall的类型不正确。您需要一个委托参数来允许将所选函数传递给方法。

void CreateButton(string buttonName, 
        string buttonIDText, 
        string buttonText, 
        PlaceHolder placeHolder, 
        EventHandler methodCall) // needed to fix your type 
{ 
    var button = new Button(); //reused variable name 
    button.ID = buttonIDText; 
    button.Name = buttonName; //you missed assigning the button name 
    button.Text = buttonText; 
    button.UseSubmitBehavior = false; 
    button.Click += methodCall; // you dont need to do new EventHandler 
    placeHolder.Controls.Add(button); 
} 
+1

这不能解决问题或删除错误,也不能解释任何内容。 –

+0

这可以修复他的错误,因为他试图传递一个字符串作为委托 –

+0

@MatthewWhited:这是由OP发布的代码中的错误之一,但这不是他们在问题中主要询问的错误(如每题)。 –

相关问题