【问题标题】:C# drawing lineC#画线
【发布时间】:2015-12-08 07:09:57
【问题描述】:

所以,我正在为学校(项目)开发井字游戏,我遇到了这个问题:

这是代码:

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

【问题讨论】:

  • 您应该能够覆盖OnPaint 表单,并且仅在检测到井字后才绘制线条(在按钮前面)。这样,在下次点击时,您可以重置,并且您不必像 adv12 建议的那样对所有点击事件处理进行编码。我会试着举一个例子。
  • 如果你有时间,你应该研究在 WPF 中创建这个游戏,在代码中绘制形状和线条要简单得多。 msdn.microsoft.com/library/ms747393(v=vs.100).aspx

标签: c# line draw


【解决方案1】:

如果按钮是单独的控件,就没有简单的方法来绘制它们(至少在保持它们可点击的同时)。相反,您可以做的是在 Form 的 Paint 事件处理程序中自己绘制“按钮”,就像您(希望)已经画线一样。在这种情况下,最后画线,它会越过按钮。当然,以这种方式做事需要您自己处理点击,这样当用户点击表单客户区域中的某个位置时,您可以确定哪个“按钮”结束并相应地更新图形。

正如@ScottChamberlain 所建议的,这里有一些关于为什么你不应该在点击处理程序中进行绘图的信息:

Drawing glitches when using CreateGraphics rather than Paint event handler for custom drawing

【讨论】:

  • 找到解决方案后,我使用 Ax.enable = false 使按钮无法点击; (对于所有按钮),所以您不能按任何其他按钮。在我的代码中,在找到解决方案并且无法再次按下按钮之后,最后绘制了这条线。虽然我不太明白如何绘制这条线,你能用一个简单的代码解释一下吗?
【解决方案2】:

您是否考虑过让您的按钮透明?

这对我有用(使它们全部透明/平坦)。

当然,您始终可以在表单重绘和按钮本身上画线,使其看起来像一条连续的线。

或者,您可以简单地更改按钮的背景颜色以突出显示可能看起来更好的井字游戏。

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

【讨论】:

    猜你喜欢
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2011-06-25
    • 2022-11-03
    • 2011-01-17
    • 2011-11-04
    • 1970-01-01
    相关资源
    最近更新 更多