所以,我正在为学校(项目)制作一个tic tac toe游戏,我有这个问题:
这是代码:
if (A1.Text == "x" && B2.Text == "x" && C3.Text == "x")
{
l.DrawLine(p, 30, 48, 200, 150);
p.Dispose();
}
如何在这些按钮上方画线?我拥有public void A1_Click(object sender, EventArgs e)
中的所有功能,因为我将它用于每个按钮。
答案 0 :(得分:3)
如果按钮是单独的控件,则没有简单的方法来绘制它们(至少在保持它们可点击的同时)。你可以做的是绘制"按钮"你自己在Form的Paint事件处理程序中,就像你(希望)已经绘制线一样。在这种情况下,最后画线,然后它会越过按钮。当然,这样做会要求您自己处理点击,这样当用户点击表单客户区域的某个位置时,您会找出哪个"按钮"它相应地更新了图形。
正如@ScottChamberlain建议的那样,这里有一些关于为什么你不应该用点击处理程序进行绘图的信息:
Drawing glitches when using CreateGraphics rather than Paint event handler for custom drawing
答案 1 :(得分:2)
您是否考虑过使按钮透明?
这对我有用(使它们都透明/平整)。
当然,您总是可以在表单重绘和按钮本身上绘制线条,使其看起来像一条连续线。
或者,您可以简单地更改按钮的背景颜色以突出显示更好看的tic tac toe。
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (allTrue()) //If tic tac toe is detected
e.Graphics.DrawLine(new Pen(Color.Red, 10), new Point(0, 0), new Point(140, 100));
}
private void Form1_Click(object sender, EventArgs e)
{
if (allTrue()) //If you click the form after we drew our line, reset
{
ab1 = false;
ab2 = false;
ab3 = false;
this.Invalidate(); //We can call this whenever we want to redraw the form
}
}