c# 如何避免子控件位置改变造成的父控件重绘

我有个pictureBox,有个label,label是属于pictureBox的子控件的,每次改变label的location时总是会触发pictureBox的重绘,怎... 我有个pictureBox,有个label,label是属于pictureBox的子控件的,每次改变label的location时总是会触发pictureBox的重绘,怎么做可以使改变label的location时不影响pictureBox呢? 展开
 我来答
Aupryyyyyyyyyy
2013-04-17 · TA获得超过1636个赞
知道大有可为答主
回答量:1574
采纳率:53%
帮助的人:980万
展开全部
这个没有办法,必须要重绘 pictureBox 控件,否则怎么给用户响应 label 相对于父 pictureBox 控件的坐标变化呢?
如果你是在 pictureBox 的重绘处理方法里加了一些处理代码,你可以通过在处理代码里加入一个 if 检测是否应该重绘:

要改变 location:

public partical class FormClass
{
private Boolean _shouldRepaintPictureBox;

public FormClass()
{
InitializeComponents();
this._shouldRepaintPictureBox = true;
}

改变 lobel 位置的方法(...)
{
this._shouldRepaintPictureBox = false;
this.label.Location = new Point(新位置X, 新位置Y);
this._shouldRepaintPictureBox = true;
}

private void pictureBox_Paint(Object sender, PaintEventArgs e)
{
if(this._shouldRepaintPictureBox)
{
// pictureBox 重绘代码
}
}
}
追问
你的思路是没问题的,但是我没在paint里下重绘代码,我是用的异或线画十字光标。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-04-17
展开全部
你是不是重绘的时候pictureBox里的图片显示出问题了?
那你pictureBox.Refresh()一下
更多追问追答
追问
嗯,我是用异或线画的十字光标,因为每次pictureBox重绘时总有一对十字线没有清除,我就在paint事件里加了个变量,重绘时设置该变量,每次鼠标移动时判读该变量的值把没有清楚的十字线再画一遍清除,本来是已经没问题的,但是鼠标移动时只要改变了label的值就不行了,就会有很多线没有清除。如果每次改变label位置就pictureBox.Refresh一下,那会很闪的。
追答
你将绘制的方法在重绘里调用就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
水焱新火
2013-04-17 · TA获得超过256个赞
知道小有建树答主
回答量:144
采纳率:100%
帮助的人:132万
展开全部
不重绘怎么在窗口重新显示label的新位置呢?也就是说不重绘的话,你改变位置坐标完全没意义
所以我感觉这是不可能的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式