点击鼠标绘制一个矩形

2024-03-15

可以用鼠标点击画一个矩形吗?我的代码到目前为止还不能工作。你能帮助我吗?

private void panel1_MouseClick(object sender, MouseEventArgs e)
{
    Graphics g = this.CreateGraphics();
    Pen pen = new Pen(Color.Black, 2);

    g.DrawRectangle(pen, 100,100, 100, 200);
}

编辑版本:

无需过多假设您想要做什么:

private void panel1_Click(object sender, EventArgs e) {
    using (Graphics g = this.panel1.CreateGraphics()) {
        Pen pen = new Pen(Color.Black, 2);
        Brush brush = new SolidBrush(this.panel1.BackgroundColor);

        g.DrawRectangle(pen, 100,100, 100, 200);

        pen.Dispose();
    }
}

您的代码不起作用,因为它正在窗口上绘制矩形(此),然后绘制的矩形被面板隐藏。

通常 对于这样一个简单的情况覆盖 Paint 对于在面板上绘制一个矩形来说太费力了。但是,以这种方式绘制矩形是可行的,但是当重新绘制表单时,矩形将消失(例如,通过最小化并随后再次显示表单。如果矩形必须持久存在,则必须使用 Paint 方法,为此,您可以必须(例如)在单​​击事件中创建矩形,然后在绘制事件中绘制它。(参见roygbiv这种方法的解决方案)。注意:如果您使用 Paint 方法,则应尽可能保持其高效,因为 Paint 方法会被频繁调用。

Edit 2

您不需要清除背景,因为您的矩形将始终绘制在同一位置。为了在用户点击的点绘制矩形(这是一个假设,这就是你想要的)您应该将代码移至鼠标按下事件,例如:

private void panel1_MouseDown(object sender, MouseEventArgs e) {
    using (Graphics g = this.panel1.CreateGraphics()) {
        Pen pen = new Pen(Color.Black, 2);
        Brush brush = new SolidBrush(this.panel1.BackColor);

        g.FillRectangle(brush, this.panel1.Bounds);  // redraws background
        g.DrawRectangle(pen, e.X, e.Y, 20, 20);

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

点击鼠标绘制一个矩形 的相关文章

随机推荐

  • 如何使用Eclipse + CDT + MinGW更改优化级别?

    我正在使用 Eclipse CDT MinGW 编写一些 C 代码 编译输出始终显示 Info Internal Builder is used for build gcc O0 g3 Wall c fmessage length 0 o
  • 文件对象中的 rb 和 r+b 模式有什么区别[重复]

    这个问题在这里已经有答案了 我在 Python 中使用 pickle 模块并尝试不同的文件 IO 模式 works on windows rb with open pickle f rb as fhand obj pickle load f
  • 如何在 ASP.NET 全球化中配置不变文化?

    我需要将 CurrentCulture 修复为 ASP NET 应用程序中的不变区域性 我怎样才能做到这一点
  • Solidity 中的状态变量是什么?

    我读过一些关于storage memory and view pure 但我并不完全理解它们 我有以下代码 contract struct Random uint32 state uint8 i function main pure int
  • 我可以结束asp.net mvc中视图的渲染吗

    所以我试图找出一种方法 如果我的模型为空 则可以呈现错误消息 并且在该错误消息之后视图应该停止渲染 这可能吗 我的第一个想法是 response end 方法 但主视图将无法完成渲染 这是框架的一部分 我们确实需要自己构建它吗 仅使用 re
  • float 无法转换为 'MirrorDisposition' Swift 什么是mirrordisposition?

    我得到以下代码 let floatValue Float 1 let intValue Int 1 if floatValue intValue println Types and value are equal else println
  • 使用 django 实现一个对请求进行计数的计数器

    我只是想和姜戈一起尝试 我如何实现一个计数器来存储数据库上服务的请求计数 我想统计 GET 请求的数量 我该怎么做才能让它工作 我的模板
  • 如何用hadoop实现自连接/叉积?

    对成对的项目进行评估是常见的任务 示例 重复数据删除 协同过滤 相似项目等 这基本上是具有相同数据源的自连接或叉积 要进行自连接 您可以遵循 减少端连接 模式 映射器将连接 外键作为键发出 将记录作为值发出 因此 假设我们想要对以下数据的
  • 可以在 AS3 中保存 XML 文件

    var xml XML
  • VBA 公式内变量

    我有以下代码 ActiveCell FormulaR1C1 COUNTIF R 54 C 14 R 54 C 90 RC 4 我想用变量 total 替换 90 我尝试了这个但没有成功 Dim total as Integer total
  • 找不到程序集

    我将 ArrayList 序列化为二进制文件 以便通过 TCP IP 发送它 序列化文件是由服务器创建的 我希望能够使用我现在正在编写的客户端对其进行反序列化 但是 当客户端尝试反序列化时 它会抛出 SerializationExcepti
  • 如果没有响应则继续发送请求

    在循环中没有得到响应的情况下 如何继续获取网页 for el of NodeList const url el getAttribute href const res await fetch url if no response below
  • html2canvas 不从外部 css 文件获取 css 样式

    我正在使用 html2canvas 将包含 svg 对象 图像和 html 内容的 div 转换为图像 但它不会从外部 css 文件获取 css 样式 我已将这些 css 类 target 和 Circle 放入外部 css 文件中 有人请
  • 如何在 Jetpack Compose 中实现列表的“对齐中心”功能?

    在具有水平 LinearLayout 的 EpoxyRecyclerView 中 有一个 对齐中心 功能 其工作原理如下 如果我以良好的速度滚动列表 它会继续滚动 直到速度减慢并以项目位于中心为止 如果我缓慢滚动并抬起手指 那么下一个项目就
  • 材质UI下一个对话框文本字段下划线颜色

    如何使用辅助调色板颜色更改对话框内文本字段的下划线颜色 我无法做到这一点 因为文档非常混乱 假设您使用的是material ui next 您可以使用覆盖 in 创建Mui主题 import MuiThemeProvider createM
  • Rails 模型中的实例变量

    我想在 Rails 模型中初始化一个实例变量 该变量将保存一个数组 并且我想在模型中的其他方法中访问该变量 我试过这个 class Participant lt ActiveRecord Base possible statuses exi
  • 根据 Python pandas 中索引的补集挑选元素

    我有一个数据框 我从中选择两个子集 dfs df a and df b 例如在iris数据集 df a iris iris Name Iris setosa df b iris iris Name Iris virginica 获得所有元素
  • 有没有一种方法可以透明地对 SQLAlchemy 对象执行验证?

    有没有办法在设置属性之后 或设置属性时 但在提交会话之前对对象执行验证 例如 我有一个领域模型Device有一个mac财产 我想确保mac属性在添加到数据库或在数据库中更新之前包含有效且经过清理的 mac 值 看起来 Pythonic 方法
  • PHP在提交表单失败后保留表单信息

    你好 我正在 mvc 系统视图中构建一个表单 并且我希望保留所有插入的值 以防表单提交失败 如何做到这一点 我尝试过 字段示例
  • 点击鼠标绘制一个矩形

    可以用鼠标点击画一个矩形吗 我的代码到目前为止还不能工作 你能帮助我吗 private void panel1 MouseClick object sender MouseEventArgs e Graphics g this Create