RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 895587
Accepted
OneGuy
OneGuy
Asked:2020-10-20 20:22:39 +0000 UTC2020-10-20 20:22:39 +0000 UTC 2020-10-20 20:22:39 +0000 UTC

显示在 C# 中不起作用

  • 772

我目前正在使用 C# 表单。我有两种形式。我希望只要按下第一个表单中的按钮,就会打开第二个表单,并在输出此表单后执行代码。我使用了 Shown 方法,但由于某种原因它不起作用。仅当您将其放在 MessageBox 方法的最开始时才包含它。

private void Form2_Shown(object sender, EventArgs e)
    {

        float h;
        int division = 10;
        Graphics gr = pictureBox1.CreateGraphics();
        Pen p = new System.Drawing.Pen(System.Drawing.Color.Gray);
        //Разметка
        h = 0;
        while (h <= pictureBox1.Width)
        {
            gr.DrawLine(p, h, 0, h, pictureBox1.Height);
            h += division;
        }
        h = 0;
        while (h <= pictureBox1.Height)
        {
            gr.DrawLine(p, 0, h, pictureBox1.Width, h);
            h += division;
        }
        //Координатная ось
        p.Color = Color.Red;
        gr.DrawLine(p, pictureBox1.Width / 2, 0, pictureBox1.Width / 2, pictureBox1.Height);
        gr.DrawLine(p, 0, pictureBox1.Height / 2, pictureBox1.Width, pictureBox1.Height / 2);


    }

在此处输入图像描述

在此处输入图像描述

c#
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    rdorn
    2020-10-20T22:08:08Z2020-10-20T22:08:08Z

    “你吃错三明治了。”

    几个重要的点:

    • 在表单上绘制的图像不会保存在任何地方,因此,下次重新绘制表单时,它将丢失。
    • 当您打开它,调整它的大小,用另一个表单覆盖您的表单,调用代码中的方法时,该表单将被强制重绘Invalidate()。
    • Control.OnPaint(PaintEventArgs)一个虚拟方法和一个事件负责呈现表单Control.Paint。

    代码中的问题

    你在一个只被调用一次的事件中绘制,并且不记得你绘制了什么。因此,每当您更新表单时,您都会得到原始图像。

    解决方案

    有几种选择:

    1. 覆盖OnPaint或使用事件处理程序Paint。事件本身Paint调用该方法OnPaint和订阅它的所有其他方法。每当重绘表单时都会触发该事件。我们将您的绘图代码转移到适当的方法并感到高兴……但并非一切都如此简单。这可能是最明显的选择,但在正确实现方面也是最困难的,因为表单的外观和性能都直接取决于此。渲染代码应该尽可能快,没有繁重的计算,数据挖掘和其他废话。另外,您必须手动考虑表单上子元素的位置,这也不是最有趣的任务。

    2. 我们绘制一张图片并将其粘贴到表单中。这里的一切都很琐碎。我们选择Bitmap合适的尺寸,从中获取一个对象Graphics并绘制我们需要的一切。之后,我们将其作为单独的控件插入到表单中,或者将其保存在某个表单域中,然后使用DrawImagein将图像传输到所需区域OnPaint。DrawImage本机实现并且运行速度非常快,但它需要一个完成的图像。顺便说一句,DrawImage你也可以让他“思考”很长时间,例如,给他一个非常大的像素大小的图片,并附上指令来大大缩小它。这种方法对每个人都有好处,除了一件事——它不适合实时动态图像(当然,相对于实时而言)。但是将图像保存到文件中,完全没有问题- Bitmap.Save=)。

    3. 自定义控件。这个选项对我来说最有吸引力,因为它允许您完成一次工作并在需要时使用结果。

      思路如下:

      • 创建一个继承人UserControl(以下简称MyControl)。
      • 我们添加私有字段来MyControl存储需要绘制的对象。如果需要,一些数据可以是永久的,一些是用户定义的。
      • inMyControl被覆盖OnPaint,以便它以正确的顺序绘制存储在其中的对象。
      • 我们添加公共属性来接收渲染所需的参数和对象。

      全部。现在只需将我们的自定义控件放在表单上并将必要的参数传递给它,其余的将自己完成。事实上,所有标准而非非常控制都是如此。

      就复杂性而言,此选项介于第一个和第二个选项之间,但与它们不同的是,它可以通过高质量的实现轻松重用。


    似乎我没有忘记任何重要的事情,但是如果描述的内容不完全清楚,请告诉我-我会澄清=)

    • 6

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5