m0_59342845 2023-09-06 11:12 采纳率: 81%
浏览 11
已结题

winform图片上这个控件该怎么制作

winform图片上这个控件该怎么制作,两条边框上有三个点,中间显示文本。

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-06 12:15
    关注

    【以下回答由 GPT 生成】

    在WinForm图片上显示文本的控件,同时具备两条边框上各有三个点的功能,可能是用于标记或注释图片上的特定区域。这种控件可以用于指出感兴趣的区域,以改善沟通和可视化需求。

    如果您需要这样的控件,您可能希望能够以编程方式(通过API或事件)添加或删除标记点,并且能够自定义标记点的样式、颜色、大小等。

    以下是一种可能的解决方案的简要步骤和代码示例:

    1. 创建一个新的WinForm应用程序项目。
    2. 在窗体上添加一个PictureBox控件用于显示图片。

    csharp PictureBox pictureBox = new PictureBox(); // 设置图片大小和位置 pictureBox.Size = new Size(400, 300); pictureBox.Location = new Point(10, 10); // 设置图片填充方式 pictureBox.SizeMode = PictureBoxSizeMode.StretchImage; // 设置图片 pictureBox.Image = Image.FromFile("your_image.jpg"); // 添加到窗体 this.Controls.Add(pictureBox);

    1. 创建自定义的标记点类,用于表示每个标记点的位置和样式。

    csharp public class Marker { public Point Location { get; set; } public Color Color { get; set; } public int Size { get; set; } }

    1. 在窗体上添加一个集合来保存所有的标记点。

    csharp List<Marker> markers = new List<Marker>();

    1. 自定义一个绘制方法,用于在图片上绘制所有标记点和边框。

    csharp private void DrawMarkers(Graphics g) { // 绘制标记点 foreach (Marker marker in markers) { Brush brush = new SolidBrush(marker.Color); g.FillEllipse(brush, marker.Location.X - marker.Size / 2, marker.Location.Y - marker.Size / 2, marker.Size, marker.Size); } // 绘制边框上的点 int borderWidth = 10; int pointSize = 5; Pen pen = new Pen(Color.Black, 1); // 上边框点 g.DrawEllipse(pen, pictureBox.Left - pointSize / 2, pictureBox.Top - borderWidth - pointSize / 2, pointSize, pointSize); g.DrawEllipse(pen, pictureBox.Left + pictureBox.Width / 2 - pointSize / 2, pictureBox.Top - borderWidth - pointSize / 2, pointSize, pointSize); g.DrawEllipse(pen, pictureBox.Left + pictureBox.Width - pointSize / 2, pictureBox.Top - borderWidth - pointSize / 2, pointSize, pointSize); // 下边框点 g.DrawEllipse(pen, pictureBox.Left - pointSize / 2, pictureBox.Top + pictureBox.Height + borderWidth - pointSize / 2, pointSize, pointSize); g.DrawEllipse(pen, pictureBox.Left + pictureBox.Width / 2 - pointSize / 2, pictureBox.Top + pictureBox.Height + borderWidth - pointSize / 2, pointSize, pointSize); g.DrawEllipse(pen, pictureBox.Left + pictureBox.Width - pointSize / 2, pictureBox.Top + pictureBox.Height + borderWidth - pointSize / 2, pointSize, pointSize); }

    1. 在PictureBox的Paint事件中调用绘制方法。

    csharp private void pictureBox_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; DrawMarkers(g); }

    1. 实现鼠标事件来添加/删除标记点。

    csharp private void pictureBox_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { // 添加标记点 Marker marker = new Marker(); marker.Location = e.Location; marker.Color = Color.Red; marker.Size = 10; markers.Add(marker); pictureBox.Invalidate(); } else if (e.Button == MouseButtons.Right) { // 删除当前位置上的标记点 foreach (Marker marker in markers) { if (Math.Abs(marker.Location.X - e.Location.X) <= marker.Size / 2 && Math.Abs(marker.Location.Y - e.Location.Y) <= marker.Size / 2) { markers.Remove(marker); break; } } pictureBox.Invalidate(); } }

    请注意,这只是一个简单的示例来演示如何在WinForm图片上显示文本的控件,并添加边框上的标记点。具体实现可能因您的要求和需求而异。如果有更多详细的要求和描述,请提供它们,以便我能够更精确地解决您的问题。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月21日
  • 已采纳回答 9月13日
  • 创建了问题 9月6日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表