事情是这样的:我有两种形式,Form1
和Form2
。
Form1
它是主要的,它有 20 个按钮,每个按钮代表我餐厅的一张不同的桌子。单击它们中的任何一个都会打开一个页面Form2
,可以在其中注册订单等...每个form2
还包含一个标题按钮,单击该按钮时Abrir Mesa
,我需要更改. 如果单击按钮,那么我需要它是 THIS 而不是改变颜色的按钮,依此类推。MESA 1
Form1
Abrir mesa
MESA 2
MESA 1
我已经创建了这个只适用于我的第一个按钮,也就是说,MESA1
但我找不到适合所有人的东西。我留下一些代码,看看是否有人可以帮助我。从已经非常感谢了!
// FORM 1
public void btnMesa1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2(this);
f2.Text = "Mesa 1";
f2.Show();
}
private void btnMesa2_MouseClick(object sender, MouseEventArgs e)
{
Form2 f2 = new Form2(this);
f2.Text = "Mesa 2";
f2.Show();
}
public void cambiarFondo()
{
btnMesa1.BackColor = Color.Green;
}
// FORM 2
public partial class Form2 : Form
{
double precio = 0;
double cantidad = 0;
double subtotal = 0;
double total = 0;
Form1 f1 = new Form1();
public Form2()
{
}
public Form2(Form1 parametro)
{
InitializeComponent();
f1 = parametro;
}
private void Form2_Load(object sender, EventArgs e)
{
DataGridViewButtonColumn colBotones = new DataGridViewButtonColumn();
colBotones.Name = "colBotones";
colBotones.HeaderText = "BORRAR";
this.Pagos.Columns.Add(colBotones);
}
private void txtCantidad_TextChanged(object sender, EventArgs e)
{
precio = Convert.ToDouble(txtPrecio.Text);
cantidad = Convert.ToDouble(txtCantidad.Text);
subtotal = precio * cantidad;
etiquetaSubTotalNum.Text = subtotal.ToString();
}
// AGREGA UN PRODUCTO
private void btnAgregarItem_Click(object sender, EventArgs e)
{
Pagos.Rows.Add(txtID.Text, txtNombre.Text, txtPrecio.Text, txtCantidad.Text, etiquetaSubTotalNum.Text);
}
// CALCULA EL VALOR TOTAL DE LA MESA E IMPRIME EL TICKET
private void btnTicket_Click(object sender, EventArgs e)
{
for (int i = 0; i < Pagos.Rows.Count; i++)
{
total += double.Parse(Pagos.Rows[i].Cells["celdaSubtotal"].Value.ToString());
}
etiquetaTotalNum.Text = total.ToString();
total = 0;
}
// CIERRA LA MESA
private void btnCerrarMesa_Click(object sender, EventArgs e)
{
this.Close();
}
// DIBUJA "BORRAR" SOBRE LOS BOTONES DE ELIMINAR
private void Pagos_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.ColumnIndex >= 0 && this.Pagos.Columns[e.ColumnIndex].Name == "colBotones" && e.RowIndex >= 0)
{
e.Paint(e.CellBounds, DataGridViewPaintParts.All);
DataGridViewButtonCell celBoton = this.Pagos.Rows[e.RowIndex].Cells["colBotones"] as DataGridViewButtonCell;
e.Graphics.DrawString("BORRAR", new Font("Verdana", 8), new SolidBrush(Color.Red),
e.CellBounds.Left + 3, e.CellBounds.Top + 3);
e.Handled = true;
}
}
// ELIMINA LA FILA DE ESE PRODUCTO AL HACER CLICK EN EL BOTON "BORRAR"
private void Pagos_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (this.Pagos.Columns[e.ColumnIndex].Name == "colBotones")
{
Pagos.Rows.RemoveAt(Pagos.CurrentRow.Index);
}
}
// CAMBIA EL BOTON DE LA MESA A COLOR VERDE/ABIERTA
private void btnAbrirMesa_Click(object sender, EventArgs e)
{
this.btnAbrirMesa.BackColor = Color.Green;
f1.cambiarFondo();
}
一个非常简单的解决方案是您更改您的方法
cambiarFondo
,以便它接收应该更改颜色的按钮的名称,并通过所述名称查找该按钮。像这样的东西:然后,在您的 中
Form2
,更改调用,以便它发送要更改的按钮的名称:这不是最好的解决方案,我可能会选择使用自定义事件并让每个按钮监听事件以知道它应该改变颜色,但使用这个解决方案我认为它可以为你工作。
一个重要的说明。在你的
Form2
你有以下行:这是创建一个
Form1
不用于任何事情的新实例。只需将其更改为Form f1;
,因为您随后会存储对实例的引用。