hey hola buenos tardes.[depende de la hora claro]
mira una vez tuve el mismo problema y lo solucione de una forma no muy ortodoxa si pudieramos llamarlo asi
boy suponer que los botones estan sobre una forma [WindowsForms] al igual que mucho objetos estos tienen una coleccion de objetos valga la redundancia
entonces tus botones se ecuentran dentro de esta coleccion, ahora ballamos un poco al codigo
//primero que nada hacemos la funccion que se va a ejecutar en los botones que la llamare "BotonPresionado"
//la funcion no regresa nada por lo tanto usamos void, le pasamos un valor de tipo objeto lo nombramos "sndr" para referirnos a el como un tipo de sender
private void BotonPresionado(object sndr)
{
//dentro del ciclo del foreach lo que hacemos es buscar dentro de la lista de controlroles del formulario [this.Controls]
foreach(object objeto in this.Controls)//cada pasada del ciclo el objeto de se guardara temporalmente en la variable "objeto"
{
if (objeto == sndr) //cuando objeto igual al objeto sndr que mandamos por medio de la funcion sabras que boton fue presionado
{
//En este ejemplo solo mandamos un mensaje con el nombre del ejemplo
MessageBox.Show((objeto as Button).Name );
}
}
}
ahora solo tendras que poner la funcion dentro de cada boton, ejemplo :
private void button1_Click(object sender, EventArgs e)
{
BotonPresionado(sender);
}
para tu problema se me ocurre pasar el objeto por referencia
private void BotonPresionado(ref object sndr)
y en lugar de la instruccion del message box poner
algo asi
(objeto as Button).opacity = 50;
bueno por mi parte es todo espero y haya podido ayudarte