2017-03-02 75 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發佈的代碼中的錯誤之一,但這不是他們在問題中主要詢問的錯誤(如每題)。 –

相關問題