c# - Windows 窗体中的图形

标签 c# .net winforms form-load

加载表单时,CreateGraphics() 不应该返回一个图形对象吗?

我的意思是,我可以在 Form1_Load 事件上编写以下内容吗?

Graphics x;
private void Form1_Load(object sender, EventArgs e)
{
    x = this.CreateGraphics();
}

如果不是,那是为什么?

我认为当您创建一个新表单时,constructor启动表单的所有对象。那么为什么不是图形对象呢?

我问这个,因为当我尝试在 form_load 上绘图时,它不会显示我绘制的内容。

主要原因是:我想创建一个游戏,它有一个棋盘 - 所以当用户点击新游戏时 - 首先 - 我正在启动棋盘并绘制它。 在 onPaint 事件中,我只想绘制面板的当前状态。所以我认为板的初始状态应该在 formLoad 事件上绘制。

最佳答案

您不应该以这种方式使用 Graphics 对象;您应该将它的每次使用都包含在一个 using block 中,或者确保在每组绘图操作之后处理它。您在此处的代码将留下一个不必要的 Graphics 对象。

简要示例:

private void MyonPaintOverload()
{
    using(Graphics x = this.CreateGraphics())
    {
        // draw here...
    }
}

此外,在 Form_Load() 上绘图将不起作用,因为此时窗口实际上并不可见;基本上没有什么可借鉴的。

是的,您通常需要在每个周期重绘整个 - 因为像将另一个窗口拖过您的窗口这样简单的事情会“删除”您的绘图,并且当它被另一个窗口无效时窗口被移开,您需要重绘您手动绘制的一切

关于c# - Windows 窗体中的图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15033844/

相关文章:

c# - 我可以使用 C#/.NET 以编程方式禁用 Windows 自动播放功能吗?

c# - 如何根据窗口大小调整按钮和单选按钮等 UI 项目的大小?

c# - .NET Core 中的环境变量配置

C# 运行时错误 : "DataGridViewComboBoxCell value is not valid"

.net - GroupBox控件中的圆角

c# - 非阻塞并发收集?

c# - 请推荐一个将asp.net网站迁移到三层架构的方案

c# - Azure TableServiceEntity - 存储复杂的类

c# - Epplus:如何使 "LoadFromCollection"在模型中使用 [DisplayFormat()] 属性

.net - 本地化日期格式描述符