
c# 如何避免子控件位置改变造成的父控件重绘
我有个pictureBox,有个label,label是属于pictureBox的子控件的,每次改变label的location时总是会触发pictureBox的重绘,怎...
我有个pictureBox,有个label,label是属于pictureBox的子控件的,每次改变label的location时总是会触发pictureBox的重绘,怎么做可以使改变label的location时不影响pictureBox呢?
展开
3个回答
展开全部
这个没有办法,必须要重绘 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 重绘代码
}
}
}
如果你是在 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.Refresh()一下
更多追问追答
追问
嗯,我是用异或线画的十字光标,因为每次pictureBox重绘时总有一对十字线没有清除,我就在paint事件里加了个变量,重绘时设置该变量,每次鼠标移动时判读该变量的值把没有清楚的十字线再画一遍清除,本来是已经没问题的,但是鼠标移动时只要改变了label的值就不行了,就会有很多线没有清除。如果每次改变label位置就pictureBox.Refresh一下,那会很闪的。
追答
你将绘制的方法在重绘里调用就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不重绘怎么在窗口重新显示label的新位置呢?也就是说不重绘的话,你改变位置坐标完全没意义
所以我感觉这是不可能的
所以我感觉这是不可能的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询