winform-C#Winform picutureBox数组的拖动问题

问题描述

C#Winform picutureBox数组的拖动问题

点击一次picutureBox1会动态生成新的picturebox,并存放到数组中,设置了鼠标事件,编译时没报错,但运行时会出现那三个mouse事件的错误类型:未将对象引用设置到对象的实例。求大神!!

public partial class Form1 : Form
{
int i = 0;
public Form1()
{
InitializeComponent();
pictureBox1.Click += new EventHandler(pictureBox1_Click);

        pic[i].MouseDown += new MouseEventHandler(pic_MouseDown);
        pic[i].MouseUp += new MouseEventHandler(pic_MouseUp);
        pic[i].MouseMove += new MouseEventHandler(pic_MouseMove);
    }

    public void pictureBox1_Click(object sender, EventArgs e)
    {
        i++;
        pic[i] = new PictureBox();
        this.pic[i].Location = new System.Drawing.Point(10*i, 20*i);
        this.pic[i].Size = new System.Drawing.Size(100, 50);
        this.pic[i].TabIndex = 1;
        this.pic[i].TabStop = false;
        this.pic[i].AutoScrollOffset = new System.Drawing.Point(500, 500);

        this.pic[i].MouseDown += new MouseEventHandler(pic_MouseDown);
        this.pic[i].MouseUp += new MouseEventHandler(pic_MouseUp);
        this.pic[i].MouseMove += new MouseEventHandler(pic_MouseMove);
        Controls.Add(this.pic[i]);
        this.pic[i].BackColor = System.Drawing.Color.Transparent;
        this.pic[i].SizeMode = PictureBoxSizeMode.Zoom;
        this.pic[i].BorderStyle = BorderStyle.Fixed3D;

    }

        PictureBox[] pic = new PictureBox[15];

        int xPos;
        int yPos;
        bool MoveFlag;

    //在picturebox的鼠标按下事件里.
        private void pic_MouseUp(object sender, MouseEventArgs e)
        {
            MoveFlag = false;
        }

    ////在picturebox鼠标移动
        private void pic_MouseMove(object sender, MouseEventArgs e)
        {
            if (MoveFlag)
            {
                pic[i].Left += Convert.ToInt16(e.X - xPos);//设置x坐标.
                pic[i].Top += Convert.ToInt16(e.Y - yPos);//设置y坐标.

            }
        }
        private void pic_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)//判断你点的是不是左键
            {

                MoveFlag = true;
                xPos = e.X;
                yPos = e.Y;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
}

解决方案

http://blog.163.com/lightyue_leyuan/blog/static/7513607720096299102502/
http://www.cnblogs.com/lyl6796910/archive/2012/06/27/2566359.html

时间: 2024-09-19 09:48:10

winform-C#Winform picutureBox数组的拖动问题的相关文章

winform 无边框 窗体基本功能 拖动和系统右键菜单冲突

问题描述 usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Runtime.InteropServices;usingRightMenuItem;namespaceClientFrom{pu

C# Winform 让整个窗口都可以拖动_C#教程

今天在网上查一些资料的时候, 无意中发现另一种办法, 非常方便, 调用系统的 API 来实现的, 效果也很好. 赶紧收藏了~ 复制代码 代码如下: [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public static extern bool SendMessage(IntPtr hwnd, int wMsg, int

c# winform word-c# winform 读取word内容时报错

问题描述 c# winform 读取word内容时报错 隔离 COM 引用"Microsoft.Office.Interop.Word"时出现问题: 未导入注册表项"HKEY_CLASSES_ROOTCLSID{00020906-0000-0000-c000-000000000046}AuxUserType". ProjectManager doc.Close(ref nullobj, ref nullobj, ref nullobj); 引起下面提示: 方法&qu

winform 配置文件-winform 中使用这种外联配置文件 读取不到数据

问题描述 winform 中使用这种外联配置文件 读取不到数据 winform 中使用这种外联配置文件 在读取的时候 ConfigurationManager.AppSettings[key].ToString().Trim() 总是提示错误,打不开ConfigConfig.xml

C#在winform中实现数据增删改查等功能_C#教程

winform中利用ado.net实现对单表的增删改查的详细例子,具体如下: 1.前言: 运行环境:VS2013+SQL2008+Windows10 程序界面预览: 使用的主要控件:dataGridview和menuStrip等.  2.功能具体介绍: 1.首先,我们要先实现基本的数据操作,增删改查这几个操作. (1)先定义一个数据库操作的公共类: using System; using System.Collections.Generic; using System.Linq; using S

WinForm遍历窗体所有子控件的方法_C#教程

本文实例讲述了WinForm遍历窗体所有子控件的方法.分享给大家供大家参考,具体如下: /// <summary> /// C# 只遍历控件子控件,不遍历孙控件 ///当控件有子控件时,需要用递归的方法遍历,才能全部列出控件上的控件 /// </summary> /// <typeparam name="T">控件类型</typeparam> /// <param name="control">要遍历的控件

C# WinForm控件、自定义控件整理(大全)

转:http://www.cnblogs.com/top5/archive/2010/04/29/1724039.html 对C# WinForm开发系列收集的控件使用方面进行整理, 加入了一些文章, 不断补充充实, 完善这方面. 基础 - 常用控件 C# WinForm开发系列 - CheckBox/Button/Label/ProgressBar WinForm下CheckedListBox的数据绑定 Winform 下无闪烁走马灯效果实现 c#,winform,progressbar+la

Winform开发客户关系管理系统(CRM)总结 3 客户分类和配置管理实现

我在本系列随笔的开始,介绍了CRM系统一个重要的客户分类的展示界面,其中包含了从字典中加载 分类.从已有数据中加载分类.以及分组列表中加载分类等方式的实现,以及可以动态对这些节点进行 配置,实现客户分类的界面配置处理.本文主要从逻辑代码实现的角度上解说以上功能的实现,介绍常 规字典模块的动态加载.客户省份城市的动态加载.客户分组管理.客户分类配置管理等模块的具体实 现. 一般情况下,我们对客户的分类都需要动态加载,对这个客户分类的管理,包括下面几种分类. 1.常规字典模块的动态加载 开发客户关系

WinForm控件开发总结(三) 认识WinForm控件常用的Attribute

在前面的文章里我们制作了一个非常简单的控件.现在我们回过头来看看这些代码透露出什么信息. 这个类是直接从Control类派生出来的,自定义控件都是直接从Control类派生出来的.这个类定义了 一个属性TextAlignment,用来控制文本在控件中显示的位置: [ Category("Alignment"), Description("Specifies the alignment of text.") ] public ContentAlignment Text