winform图片上这个控件该怎么制作,两条边框上有三个点,中间显示文本。
1条回答 默认 最新
关注 【以下回答由 GPT 生成】
在WinForm图片上显示文本的控件,同时具备两条边框上各有三个点的功能,可能是用于标记或注释图片上的特定区域。这种控件可以用于指出感兴趣的区域,以改善沟通和可视化需求。
如果您需要这样的控件,您可能希望能够以编程方式(通过API或事件)添加或删除标记点,并且能够自定义标记点的样式、颜色、大小等。
以下是一种可能的解决方案的简要步骤和代码示例:
- 创建一个新的WinForm应用程序项目。
- 在窗体上添加一个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);
- 创建自定义的标记点类,用于表示每个标记点的位置和样式。
csharp public class Marker { public Point Location { get; set; } public Color Color { get; set; } public int Size { get; set; } }
- 在窗体上添加一个集合来保存所有的标记点。
csharp List<Marker> markers = new List<Marker>();
- 自定义一个绘制方法,用于在图片上绘制所有标记点和边框。
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); }
- 在PictureBox的Paint事件中调用绘制方法。
csharp private void pictureBox_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; DrawMarkers(g); }
- 实现鼠标事件来添加/删除标记点。
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图片上显示文本的控件,并添加边框上的标记点。具体实现可能因您的要求和需求而异。如果有更多详细的要求和描述,请提供它们,以便我能够更精确地解决您的问题。
【相关推荐】
- 你可以看下这个问题的回答https://ask.csdn.net/questions/347476
- 这篇博客你也可以参考下:【WinForm】通过控件名称获取控件
- 您还可以看一下 胡延亮老师的winform基础课程中的 winform课程介绍小节, 巩固相关知识点
- 除此之外, 这篇博客: winform自定义窗体,重绘标题栏,自定义控件学习中的 虽然现在都在说winform窗体太丑了,但是我也能尽量让桌面应用程序漂亮那么一点点 部分也许能够解决你的问题。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥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腾讯文档收集表