中易网

c# panel画图 panel1中画一个矩形,然后实现用鼠标拖拽这个矩形移动

答案:2  悬赏:50  
解决时间 2021-01-30 17:55
我是这么编的,请问为什么不对?能帮助改改吗?
private Rectangle m_Rect;
public Form1()
{
InitializeComponent();
this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true);
m_Rect = new Rectangle(10, 10, 50, 30);
}

private void panel1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.FillRectangle(SystemBrushes.ControlDark, this.m_Rect);
e.Graphics.DrawRectangle(SystemPens.ControlDarkDark, this.m_Rect);
}
Point pt;

private void m_Rect_MouseDown(object sender, MouseEventArgs e)
{
pt = Cursor.Position;
}

private void m_Rect_MouseMove(object sender, MouseEventArgs e)
{
int mx = 0;
int my = 0;
int px = 0;
int py = 0;
int x = 0;
int y = 0;
if (e.Button == MouseButtons.Left)
{
x = Cursor.Position.X - this.Location.X - 14;//得到鼠标在窗口中对应的位置
y = Cursor.Position.Y - this.Location.Y - 32;//窗口的左上角与窗口的可用区域的左上角的两个坐标差
px = Cursor.Position.X - pt.X;//取得鼠标相对移动的位置
py = Cursor.Position.Y - pt.Y;//pt是存储上次鼠标移动后的位置
mx = m_Rect.Location.X + px;//把鼠标移动大小复给矩形,让矩形也移动鼠标移动的大小
my = m_Rect.Location.Y + py;
m_Rect.Location = new Point(mx, my);
pt = Cursor.Position;
}
}
最佳答案
程序已发送 里面有两个程序 一个是关于Pain中的拖拽 一个是listbox中的拖拽。你参考参考,也许对你要实现的效果有帮助。
全部回答
<p>为了简单起见,我画在了窗口上,与画在panel中的一样的道理 。</p> <p>下面为效果图,最后为代码</p> <p> </p> <p></p> <p> </p> <p> </p> <p></p> <p></p>
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
富阳大家房地产经纪有限公司地址在什么地方,
以《父爱》为题的作文400字
(1)已知10^a=5,求100^a (2)简便计算:(-
我一直怀疑老婆对自己不忠怎么办?
美的饮水机里边的电水壶是不是304钢的
生于1982年水瓶座,2015年的运程怎样
司母戊鼎是中国古代最大的青铜器吗
作文善良的大娘,主要通过神态描写
任凭什么也什么?
谁了解翡翠手镯去哪买比较好?
光威无法一本三代目5.4能钓多大的
日语翻译 灯太亮,眼睛痛
有句歌词我只记得一句 好像全世界 唱的很激情
为什么富江爱吃鱼子酱和鹅肝酱
【急】在其他视听元素一致的情况下,有字幕的
推荐资讯
tfc猛攻能跟猛大帅基地组合吗
4399造梦西游3暑假活动什么时候结束?
自己家种的土豆!土没有遮住长出来有点绿色能
厦门寄信给台湾
激战2迷雾碎层各层怎么打
牛牛经常输用文字怎么体现出来?
日文翻译帝进
SR是什么品牌?(自行车)
为什么优酷下载了,但是却没有在主屏幕上显示
孩子上二年级了,他不爱写字,而且还是慢性子
今年高考考了388,推荐几个合肥的大专 理科
在淘宝买东西,店家说下午4点发货,从济南到
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?