c# - 当循环条件为日期时图形不绘制。 C#, 窗体

标签 c# winforms graphics

所以我得到了这段代码。 (currPosX 定义较早)

while (earliestDate < DateTime.Today)
        {
            currPosX = currPosX + 5;
            e.Graphics.DrawLine(Pens.Black, currPosX, 0, currPosX, 10);

            earliestDate = earliestDate.AddDays(1);
        }

图形不绘制。这真的很奇怪,因为只有当条件语句是日期比较时才会发生这种情况。我调试了,它确实进入了循环,并且值被弄乱了(例如 currPosX)。但是,没有显示。更奇怪的是,如果我在循环中添加一个 MessageBox.Show("blabla"),就会弹出消息框,并绘制图形。这是怎么回事?

编辑:提醒大家,当它是非日期时间条件时,它可以工作。这意味着这段代码有效。它确实显示了一系列线条

int i = 0;

        while(i < 10)
        {
            currPosX = currPosX + 5;
            e.Graphics.DrawLine(Pens.Black, currPosX, 0, currPosX, 10);
            i++;
        }

最佳答案

我做了一个简单的测试项目,它只有一个没有控件的表单(代码如下)。如您所见,我在构造函数中添加了一些代码来初始化最早的数据,以便 Paint 事件中的 while 循环将执行一次。还硬编码了 currPos 值。

如果您运行它,它将按预期绘制一条垂直线。但是如果你做了任何使图形无效的事情(例如,最小化和恢复窗体),它不会重绘图形。所以,它画了一次,24小时内不会再画了!

public partial class Form1 : Form
{
    DateTime earliestDate;
    public Form1()
    {
        earliestDate = DateTime.Now;
        earliestDate = earliestDate.AddDays(-1);
        InitializeComponent();
    }

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        while (earliestDate < DateTime.Today)
        {
            float currPosX = 0;
            currPosX = currPosX + 5;
            e.Graphics.DrawLine(Pens.Black, currPosX, 0, currPosX + 5, 10);

            earliestDate = earliestDate.AddDays(1);
        } 
    }
}

关于c# - 当循环条件为日期时图形不绘制。 C#, 窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2550257/

相关文章:

c# - 在 C# 中限制对特定设备的输入

python - 如何在 tkinter Canvas 上绘制弧线?

c# - RichTextBox 的自定义 System.Diagnostics.TraceListener 输出挂起

c# - 使用 dataGridView 显示数据库中的数据?

winforms - winform 的 HTML 布局

java 二维图形库

java - 与 libgdx 中的图像缩放和定位混淆

c# - 我可以使用 async 和 Task.Run 使复杂的方法异步吗?

c# - 从 WebAPI Controller 问题调用 SignalR hub

c# - 使用YouTube API和HTTpWebRequest批量删除视频