夏456 2023-03-18 08:57 采纳率: 85.7%
浏览 68
已结题

继续拖拽222显示到picturebox上,让两个数值都显示在picturebox背景上

img


在把listview中的值111拖拽到picturebox的背景上显示出来后,能否继续拖拽222显示到picturebox上,让两个数值都显示在picturebox背景上面,并且还可以继续拖拽改变两个数值的位置,要实现这个功能是要在picturebox上建立一个集合或者数组吗?接收来自listview中的值吗?


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp7
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            //listView1.AllowItemDrag = true;
            this.pictureBox1.AllowDrop = true;
        }
        //创建一个接收listview的list
        private void pictureBox1_Click(object sender, EventArgs e)
        {
            
        }
        //将item传送走
        private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
        {
            // DoDragDrop(e.Item.ToString(), DragDropEffects.Copy);
           
            ListViewItem item = (ListViewItem)e.Item;
            string itemName = item.Text;
            listView1.DoDragDrop(itemName, DragDropEffects.Copy);

        }

        private void listView1_MouseDown(object sender, MouseEventArgs e)
        {
            //if (listView1.SelectedItems == null)
            //    return;
            //ListViewItem selectedItem = listView1.SelectedItems[0];
            //listView1.DoDragDrop(listView1.SelectedItems[0].Text, DragDropEffects.All);
            ////listView1.DoDragDrop(listView1.SelectedItems, DragDropEffects.Copy);
        }

        private void listView1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(typeof(string)))
            {
                e.Effect = DragDropEffects.Copy;
            }else
            { e.Effect = DragDropEffects.None; }
        }
        private void Form1_Load(object sender, EventArgs e)
        {

            //listView1.AllowItemDrag = true;
            pictureBox1.AllowDrop = true;



        }
        //判断是不是可以接收的类型
        private void pictureBox1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.Text))
            {
                e.Effect = DragDropEffects.Copy;
            }else

            { e.Effect = DragDropEffects.None; }
        }

        private void pictureBox1_DragDrop(object sender, DragEventArgs e)
        {


            string itemName = (string)e.Data.GetData(DataFormats.Text);

            //把数据显示在picture
            //Bitmap bmp;
            //if (pictureBox1.Image != null)
            //{
            //    bmp = new Bitmap(pictureBox1.Image);
            //}
            //else
            //{
            //    bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            //}

            //Graphics g = Graphics.FromImage(bmp);

            // 计算文本的位置

            //int yOffset = bmp.GetPixel(0, 0).A == 0 ? 0 : bmp.Height;
            ////int x0ffset = bmp.GetPixel(0, 0).A == 0 ? 0 : bmp.Width;
            //int lineHeight = new Font("Arial", 10).Height;
            ////int newX = x0ffset + lineHeight;
            //int newY = yOffset + lineHeight;
            Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            Graphics g = Graphics.FromImage(bmp);
            List<string> list = new List<string>();
           
            foreach (string itemNames in list)
            {
                g.DrawString(itemName, new Font("Arial", 10), Brushes.Red, new Point(10, 10));
            }
            //g.DrawString(itemName, new Font("Arial", 10), Brushes.Red, new Point(10,10));
            pictureBox1.Image = bmp;



        }




    }

}

  • 写回答

3条回答 默认 最新

  • 文盲老顾 WEB应用领新星创作者 2023-03-18 09:18
    关注

    怎么又问了一遍?已经说的很清楚了啊,你如果不记录数据,图片本身是不会知道你已经放了多少内容的,你得自己记录

    打个比方,厨师只管做饭,具体谁坐哪,各自吃了什么,厨师才不关心,得服务员处理,你加个记录就是干服务员的活,画布是干厨师的活

            private List<string> list = new List<string>();
            private void PictureBox1_DragDrop(object sender, DragEventArgs e)
            {
                string itemName = (string)e.Data.GetData(DataFormats.Text);
                list.Add(itemName);
                Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
                Graphics g = Graphics.FromImage(bmp);
                for (int i = 0; i < list.Count; i++)
                {
                    itemName = list[i];
                    g.DrawString(itemName, new Font("Arial", 10), Brushes.Red, new Point(10, 10 + i * 24));
                }
                //g.DrawString(itemName, new Font("Arial", 10), Brushes.Red, new Point(10,10));
                pictureBox1.Image = bmp;
            }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月26日
  • 已采纳回答 3月18日
  • 修改了问题 3月18日
  • 创建了问题 3月18日

悬赏问题

  • ¥15 多尺度特征图提取和融合
  • ¥15 微信小程序:渲染收货地址时页面不显示
  • ¥20 win7 64位DirectShow提示初始化失败如何解决?
  • ¥20 小规模孤立词识别系统设计
  • ¥15 关于Java对接海康威视车牌识别一体机SDK是否需要固定外网的IP?
  • ¥15 Linux扩容时,格式化卡住了:vgdispaly查看卷组信息,没有输出
  • ¥18 关于#ubuntu#的问题:使用背景-工作职责内有七八台ubuntu系统的电脑,平时需要互相调取资料,想实现把这几台电脑用交换机组成一个局域网,来实现指定文件夹的互相调取和写入
  • ¥20 求一个简易射频信号综测仪
  • ¥15 esp8266 tally灯 接收端改为发射端
  • ¥30 Labview代码调用access 数据库,相同代码其中一个调用不出来是为什么