C#画线

时间:2015-12-07 22:09:51

标签: c# line draw

所以,我正在为学校(项目)制作一个tic tac toe游戏,我有这个问题: enter image description here

这是代码:

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)中的所有功能,因为我将它用于每个按钮。

2 个答案:

答案 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
    }
}

Testing

Properties