避免「批量生產的代碼」...如果以後你需要改變功能,你將不得不改變它的81種方法。這是不可維護的。
那麼,該怎麼辦?
首先,我甚至不會手動將每個按鈕放入窗口。我會讓我的代碼爲我添加每個按鈕。現在,你沒有說你是在做WinForms
還是WPF
。所以我會假設WPF
,因爲它更新,我覺得好多了。
編程方式添加按鈕
創建一個名爲gMain
Grid
一個Window
。然後綁在窗口的Initialize
事件:
private void handleWindowInitialized(object sender, EventArgs e)
{
// Add 3 rows and 3 columns.
for (int i = 0; i < 3; i++)
{
gMain.ColumnDefinitions.Add(new ColumnDefinition());
gMain.RowDefinitions.Add(new RowDefinition());
}
// Add button to each cell.
for(int row=0; row<3; row++)
for (int column = 0; column < 3; column++)
createButton(row, column);
}
所以,現在,我們已經建立了gMain
,讓我們看看方法createButton()
。
構建按鈕
private void createButton(int row, int column)
{
var button = new Button();
// Add to gMain
gMain.Children.Add(button);
// Place the button in the correct cell.
Grid.SetRow(button, row);
Grid.SetColumn(button, column);
// Tie to the click event.
button.Click += handleButtonClick;
}
是不是很簡單?我們只是創建一個Button
,將它添加到gMain
,放入正確的單元格,然後綁定到Click
事件。現在讓我們看看事件處理程序。
事件處理程序
void handleButtonClick(object sender, RoutedEventArgs e)
{
var button = (Button)sender;
int row = Grid.GetRow(button);
int column = Grid.GetColumn(button);
// Do what ever you would like to do...
}
請注意,我們能夠告訴從這列和行...你應該能夠做你需要的任何邏輯。這很棒,因爲那樣你就不需要一堆不同的方法。
我的猜測是,你實際上並沒有將代碼連接到按鈕本身。我發現生成接線的最簡單方法是雙擊IDE中的按鈕,讓VS爲您創建連接。 – sous2817
那麼這條佈線究竟如何工作呢?有沒有辦法做到這一點,而沒有實際雙擊所有的按鈕? – frogeyedpeas
當然,你必須將你的方法附加到你的事件上,按照'button1.Clicked + = YourMethodName;'的方向行事。只要看看designer.cs類,你就會看到VS如何連接它們。 –