为什么我的应用程序没有绘制任何东西?

2024-01-20

我对 C#(一般编程)非常陌生(阅读了 3 周的经验),从 html/css 和 javascript 开始,现在开始使用 C#。

我正在尝试以 Windows 形式制作自己的简单“绘画”应用程序。但我遇到了一个问题,只是无法解决它,无论我阅读或遵循其他人的代码多少,我都被困住了。以下代码工作正常,但在调整应用程序窗口大小时,绘图会消失。

作为解决方案,我读到在 panel1_Paint 事件中声明 Graphics 方法应该可以解决,这是我的问题。请参阅最后一个代码示例,我想出了这个(是的,就像我说的,我对此很陌生)并且它没有绘制任何东西。

我只是尝试在 panel1_Paint 事件下重新创建第一个示例,但我猜想在 mouseMove 事件期间出现了问题,我无法弄清楚它是什么。

有人可以向我解释一下我在这里缺少什么吗,我将非常感激。提前致谢。

[旧代码]

namespace Painter
{
public partial class Form1 : Form
{
    Graphics graphics;
    Pen pen = new Pen(Color.Black, 1);
    Point startingPoint = new Point(0, 0);
    Point endPoint = new Point(0, 0);
    bool mousePaint = false;



    public Form1()
    {
        InitializeComponent();
        this.DoubleBuffered = true;

    }

    private void panel1_MouseDown(object sender, MouseEventArgs e)
    {
        startingPoint = e.Location;
        if (e.Button == MouseButtons.Left)
        {
            mousePaint = true;
        }
    }

    private void panel1_MouseMove(object sender, MouseEventArgs e)
    {
        if(mousePaint == true)
        {
            endPoint = e.Location;
            graphics = panel1.CreateGraphics();
            graphics.DrawLine(pen, startingPoint, endPoint);
        }
        startingPoint = endPoint;
    }

    private void panel1_MouseUp(object sender, MouseEventArgs e)
    {
        mousePaint = false;
    }


  }
}

[新代码]

namespace Painter
{
public partial class Form1 : Form
{
    Pen pen = new Pen(Color.Black, 1);
    Point startingPoint = new Point(0, 0);
    Point endPoint = new Point(0, 0);
    bool mousePaint = false;



    public Form1()
    {
        InitializeComponent();
        this.DoubleBuffered = true;

    }

    private void panel1_Paint(object sender, PaintEventArgs e)
    {
        Graphics graphics = panel1.CreateGraphics();

        if (mousePaint == true)
        {
            graphics.DrawLine(pen, startingPoint, endPoint);
        }
    }


    private void panel1_MouseDown(object sender, MouseEventArgs e)
    {
        startingPoint = e.Location;
        if (e.Button == MouseButtons.Left)
        {
            mousePaint = true;
        }
    }

    private void panel1_MouseMove(object sender, MouseEventArgs e)
    {
        if(mousePaint == true)
        {
            endPoint = e.Location;
        }
        startingPoint = endPoint;
    }

    private void panel1_MouseUp(object sender, MouseEventArgs e)
    {
        mousePaint = false;
    }


   }
 }

private void panel1_Paint(object sender, PaintEventArgs e)
{
    Graphics graphics = panel1.CreateGraphics();

这是无稽之谈!始终且仅使用e.Graphics对象从Paint参数!!

另外:要触发Paint事件做一个panel1.Invalidate();每当您的绘图数据发生变化时!

另外:确保您了解您的内容mousePaint标志应该控制:鼠标绘画(即添加要绘制的新形状)或常规绘画(即之前绘制的所有形状)!?注意all绘画,当前和以前的需要从 Paint 事件中完成,每当有需要的时候即一遍又一遍!

为此:收集所有形状的数据List<T>..

To Doublebuffer a Panel你需要将其子类化。你的代码开启DoubleBuffering为了Form,这很好,但无济于事Panel..

相反,只需使用PictureBox,这是用于绘图的控件!

A DoubleBuffered Panel subclass就这么简单:

class DrawPanel : Panel 
{
   public DrawPanel()
    {
        DoubleBuffered = true;
    }
}

Update:相反,您也可以使用Label (with Autosize=false);它还有DoubleBuffered属性开箱即用,并且支持绘图比Panels do.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的应用程序没有绘制任何东西? 的相关文章

  • MongoDB C# 驱动程序检查身份验证状态和角色

    这是我使用 MongoDB 身份验证机制登录 MongoDB 的代码 try var credential MongoCredential CreateMongoCRCredential test admin 123456 var sett
  • 模板类包装任意类型/非类型模板类

    假设我有一个模板类base和一个班级wrapper其中包含一个实例化成员base 我想定义班级wrapper这样它依赖于模板参数包 该参数包只是 传递 给实例化成员base 例如 考虑下面的代码 它工作得很好 include
  • 我可以使用反射更改 C# 中的私有只读字段吗?

    我想知道 由于很多事情都可以使用反射完成 我可以在构造函数完成执行后更改私有只读字段吗 注 只是好奇 public class Foo private readonly int bar public Foo int num bar num
  • Web UI 中的 .Result 出现死锁

    我正在阅读以下主题http blog stephencleary com 2012 07 dont block on async code html http blog stephencleary com 2012 07 dont bloc
  • 如何在 C# 事件中区分更改是由代码还是由用户进行?

    我有一个简单的TextBox一开始是空的 我有一个简单的事件 TextChanged 可以知道用户何时更改了其中的任何内容TextBox 但是 如果我自己在代码中对其执行任何操作 该事件就会触发 喜欢设置textbox Text Test
  • .NET 可移植类库中的 .ToShortDateString 发生了什么

    我想知道为什么没有 ToShortDateString在 NET 可移植类库中 我有 2 个项目 Silverlight 和常规 NET 类库 使用相同的代码 并且代码涉及调用 ToShortDateString on a DateTime
  • 我应该在单元测试中使用 AutoMapper 吗?

    我正在为 ASP NET MVC 控制器方法编写单元测试 这些控制器依赖于IMapper 我创建的用于抽象 AutoMapper 的接口 使用 Castle Windsor 通过构造函数注入传入 动作方法使用IMapper从领域对象映射到
  • 身份未映射异常

    System Security Principal IdentityNotMappedException 无法转换部分或全部身份引用 该错误仅在应用程序注册后出现一次 当 SecurityIdentifier 无法映射时 例如 返回 Ide
  • 对数字进行向上和向下舍入 C++

    我试图让我的程序分别向上和向下舍入数字 例如 如果数字是3 6 我的程序应该四舍五入最接近的数字 4 如果该数字是3 4 它将向下舍入为 3 我尝试使用ceil库获取 3 个项目的平均值 results ceil marks1 marks2
  • 使用 VSTO 更改 Outlook 设置

    我刚刚花了大约 4 个小时试图弄清楚如何以编程方式检索 设置 Microsoft Outlook 2010 的 Outlook 设置 我所说的 设置 是指文件 选项 邮件下的设置 我想做的是检索用户设置的设置列表 自动化我们每天需要在某些消
  • 组合 Datepicker 和 Timepicker 值 Win 8.1

    我试图同时使用 Datepicker Timepicker 来返回可以存储在数据库中的 DateTime 例如 我想要安排会议的开始日期和结束日期 如果适用 我将如何将这些值组合成 SQL 数据库可以处理的正确格式 任何反馈都会很棒 我让这
  • 通过 mpi 发送 c++ std::vector

    我知道存储一个std vector
  • 抽象类和接口之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 接口与基类 https stackoverflow com questions 56867 interface vs base class 我不明白抽象类和接口之间的区别 我什么时候需要使用哪种字体
  • C#:如何使用 SHOpenFolderAndSelectItems [重复]

    这个问题在这里已经有答案了 有人可以举例说明如何使用 shell 函数吗SH打开文件夹并选择项目 http msdn microsoft com en us library bb762232 VS 85 aspx来自 C 我不太明白如何使用
  • 如何从枚举中选择随机值?

    给定 C 中的任意枚举 如何选择随机值 我没有找到这个非常基本的问题 我会在一分钟内发布我的答案作为任何人的参考 但请随意发布你自己的答案 Array values Enum GetValues typeof Bar Random rand
  • 通过 MSBuild 调用 cl.exe 时无限期挂起

    我正在尝试在我的 主要是 C 项目上运行 MSBuild 想象一下一个非常庞大的代码库 Visual Studio 2015 是有问题的工具集 Windows 7 SP1 和 VS 2015 更新 2 即使使用 m 1 从而迫使它仅使用一个
  • 删除对象时指针自动指向空

    假设我有一个对象和其他几个不同类类型的对象中的 10 个指向它的指针 如果对象被删除 这些指针必须设置为空 通常我会将对象的类与具有指向它的指针的类互连 以便它可以通知它们它正在被删除 并且它们可以将它们的指针设置为空 但这也有一个负担 即
  • 如何使用 g++ 在 c++ 20 中使用模块?

    我读了这个链接https gcc gnu org wiki cxx modules https gcc gnu org wiki cxx modules并尝试从该网站复制以下示例 我已经知道这个编译器部分支持模块系统 注 我用的是windo
  • 从 C# 中的 .NET SecureString 读取单个字符?

    WPF 的PasswordBox 返回一个SecureString 它对窥探者隐藏密码 问题是你最终必须获得密码的值 而我在网上找到的建议都涉及将值复制到字符串中 这会让你回到窥探者的问题 IntPtr bstr Marshal Secur
  • 在 C# 中读取/写入命令行程序

    我正在尝试与 C 的命令行程序进行对话 它是一个情绪分析器 它的工作原理如下 CMD gt java jar analyser jar gt Starting analyser 这是我想从我的 C 程序插入内容的地方 例如 I love y

随机推荐

  • 使用 XML R 包抓取带有图像的 html 表

    我想使用 R 的 XML 包来抓取 html 表 方法与此线程中讨论的方式类似 使用 XML 包将 html 表抓取到 R 数据帧中 https stackoverflow com questions 1395528 scraping ht
  • 使用事件存储客户端 API (.NET),如何写入流并将一个事件链接到另一个事件?

    我已经设置了活动商店 https eventstore org 并且可以愉快地将事件写入流 订阅和读取历史事件 一切正常 我可以看到在ResolvedEvent传递给我的订阅处理程序方法有一个Link属性 但我想知道当我写入流时 如何 设置
  • React - 使用 axios 将图像上传到 Imgur 返回 ERR_HTTP2_PROTOCOL_ERROR

    我正在尝试向 Imgur API 发送 POST 请求 上传图像 我的 Imgur 应用程序是公开的 仅需要客户端 ID 运行时总是出现这个错误 错误 网络错误 在创建错误 createError js 16 在 XMLHttpReques
  • 如何使用相关或协方差矩阵而不是使用 R 的数据框来获得回归系数和模型拟合?

    我希望能够通过提供相关或协方差矩阵而不是 data frame 来从多元线性回归中回归系数 我意识到您丢失了一些与确定截距等相关的信息 但甚至相关矩阵也应该足以获得标准化系数和解释的方差估计 例如 如果您有以下数据 get some dat
  • 如何国际化/本地化您的 FCM 推送通知,尤其是主题?

    我想使用 Firebase 向本地化的 Android 和 iOS 设备发送推送通知 我意识到我们并没有真正的解决方案来向订阅的主题发送本地化消息 假设我有一条消息 朝鲜领导人威胁关岛 我想将其发送给订阅 新闻 主题的人 并且有 1000
  • 无法通过 GET 请求发送具有此动词类型的内容正文

    我当前正在通过 WebApi 接收请求 并尝试将其重新发送到另一个站点 目标是接收请求 例如 http localhost 9999 q 测试 http localhost 9999 q test 然后将其转发到真实站点 对于我的测试 我设
  • 如何在android中将字节数组(.h264格式)解码为视频?

    在我的应用程序中 我必须将字节数组 即 h264 格式 解码为视频和来自直播的字节数组 代码如下 static final int VIDEO BUF SIZE 100000 static final int FRAME INFO SIZE
  • Jupyter 笔记本内存管理

    我目前正在 kaggle 中开发 jupyter 笔记本 在我的 numpy 数组上执行所需的转换后 我将其腌制以便可以将其存储在磁盘上 我这样做的原因是为了释放大数组消耗的内存 pickle 阵列后消耗的内存约为 8 7 GB 我决定运行
  • 游戏框架架构——视图组件还是MVC?

    我正在尝试为我的游戏构建一个非常轻量级的可重用框架 而不是每次开始游戏时都从头开始 我有一个组件驱动的架构 例如实体由Position组件 Health组件 Ai组件等组成 我最大的问题是我的模型组成视图组件允许模型有多个视图 或者是否使用
  • 如何在 R 中绘制度分布

    我想知道绘制度分布的脚本的输出是否正确 所以脚本是 其中带有我所有顶点度数的向量存储在 x 中 x is x 1 7 9 8 5 6 2 8 9 7 5 2 4 6 9 2 6 10 8 x 是某个网络顶点的度数 例如顶点 1 的度数为 7
  • React Native 适用于互联网带宽较低的小尺寸 apk

    我计划为互联网带宽较低的新兴市场开发一款应用程序 该应用程序严重需要互联网连接才能运行 我需要这个应用程序有一个小的 apk 大小 不超过10mb 并继续努力3G网络 根据我的研究 如果我删除x86来自 React Native 的 JS
  • 有没有好的 PostgreSQL linux 客户端? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我对 PostgreSQL 没有一个好的 Linux GUI 管理和开发工具感到沮丧 与仅限 Windo
  • 将子字符串包裹在 标签中,而无需在替换时创建嵌套标签

    我有一个单词数组 用于突出显示字符串中的单词 但是有些单词可能会作为短语的一部分出现 因此我希望该短语优先于突出显示中的单个单词 例如 seo apple apple tree orchard description In my orcha
  • 在 mySQL 中存储 javascript Date()

    我目前有一个 javascript 变量 它记录当前日期和时间 如下所示 var time of call time of call new Date 我需要将它存储在 MySQL 数据库中 当我尝试上传它时 该列仅显示为空白 但我不确定我
  • Node.js - 每个 Express 请求的域,在另一个域内

    Node js 中的错误处理啊 我正在尝试布局一个像这样的基本 Node 应用程序 集群 gt Worker gt 服务器域 gt 快速请求域 因此 如果由于有人在登录表单上拼错了自己的名字而将错误抛出到调用堆栈的 18 层深处 则整个服务
  • 在线程中更改Python“请求”模块的连接池大小

    编辑 也许我对这个错误的含义是错误的 这是否表明我的客户端的连接池已满 或者服务器的连接池已满 这是我的客户端收到的错误 我正在尝试制作大量http使用 python 并发请求threading and requests模块 我在日志中看到
  • Linux 上的 C++ 开发 Code::Blocks、EMACS 或 GVIM [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在多个项目之间共享声明式管道

    我在不同的存储库中有很多项目 它们共享相同的基本 CI 工作流程 我可以轻松地将其表达为声明式管道 pipeline agent any options buildDiscarder logRotator numToKeepStr 20 s
  • 使用相同关键字并条件 Django 查询

    我有一个带有发布模型和标签模型的 Django 应用程序 每份出版物都有一个或多个与其关联的标签 我想使用一组两个标签查询数据库 并且仅返回同时具有这两个标签的出版物 尽管我确信它很容易获得 但我似乎找不到它的语法 我想我没有使用正确的语言
  • 为什么我的应用程序没有绘制任何东西?

    我对 C 一般编程 非常陌生 阅读了 3 周的经验 从 html css 和 javascript 开始 现在开始使用 C 我正在尝试以 Windows 形式制作自己的简单 绘画 应用程序 但我遇到了一个问题 只是无法解决它 无论我阅读或遵