The best thing is frankly not to have 16 different variables to start with. Instead, have an array:
Button[] buttons = new Button[16];
Then you can use exactly the syntax you want (modulo the property name). The disadvantage is that the designer doesn't really cater for this. Normally I find that if I need a lot of UI elements of the same type, it's easier to create them programmatically than in the designer, but it depends on the situation.
Another option is to use Controls["button" + (i + 1)]
, but that feels like a bit of a hack to me when you really just want an array. If you don't ever need to reassign the variables, you could use:
Button[] buttons = new Button[16];
for (int i = 0; i < 16; i++)
{
buttons[i] = (Button) Controls["button" + (i + 1)];
}
and from then on you can use the buttons
array...
Of course you could do this instead:
Button[] buttons = { button1, button2, button3, button4, button5, ... };