可能有点长,但是我说的很详细,第一个80分,谢谢:
我实现了控件的大小随窗口的变化而变化,但是 
1. 
private void c_Click(object sender, System.EventArgs e)
{
int n=0;
PictureBox p = sender as PictureBox; 
this.lVw .SelectedItems .Clear ();
foreach(ListViewItem item in this.lVw.Items) 

if( item.SubItems [n].Text==p.Tag.ToString ()) 

this.lVw.Items[n].Selected=true;
this.lVw.Focus ();
break; 

++n; 

}
上边是实现PictureBox 也listview中的数据对应的,但是我加入使控件的大小随窗口的大小改变为变化的代码后,上面的就对应不上了,断点发现是if中的判断语句不相等了,是Tag的值变化了,怎么改给点建议
2 .我不想让我画的线也随窗口的改变而变化,解决方法只有重画线么,如果是重画,那么怎么让原来画的线在窗口变大的时候隐藏
给点建议

解决方案 »

  1.   

    1、if( item.SubItems [n].Text==p.Tag.ToString ()) 你这个语句很正常啊,你是不是有代码修改了PictureBox的Tag属性?你可通过设置断点检查。2、你重绘的时间,调用控件的Invalidate()方法进行重绘
      

  2.   

    但是我加入使控件的大小随窗口的大小改变为变化的代码
    ----->
    你看下能否直接设置控件的anchor属性
      

  3.   

    http://topic.csdn.net/u/20080521/13/fd0f856e-467c-47e5-ac05-2cca7850b143.html
    两个贴内容一样.
    你着段代码是干什么的呢?tag里面存放的是什么呢?不能用其他方法、自定义属性或是变量来替换吗?
    提示为picutrebox添加一个新的属性newTag 
        public class newPictureBox : PictureBox 
        {
            public object newTag;
            public object NewTag
            {
                get
                {
                    return NewTag;
                }
                set
                {
                    NewTag = value;
                }
            }
        }        private void c_Click(object sender, System.EventArgs e)
            {
                int n=0;
                PictureBox p = sender as PictureBox; 
                this.lVw .SelectedItems .Clear ();
                p.Image =null;
                p.BackgroundImage =Image.FromFile (Application.StartupPath +@"\背景\4.jpg");
                foreach(ListViewItem item in this.lVw.Items) 
                { 
                    if( item.SubItems [0].Text==p.vewTag.ToString ()) //这里我不知道你原来picturebox的tag干什么用了
                    { 
                        this.lVw.Items[n].Selected=true;
                        this.lVw.Focus ();
                        break; 
                    } 
                    ++n; 
                } 
            }
    private void setTag(Control cons)
            {
                foreach (Control con in cons.Controls )
                {
                    //if (con is PictureBox) continue;这里已经不需要拉。
                    con.Tag = con.Width +":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size;
                    if (con.Controls.Count > 0)
                    {
                        setTag(con);   
                    }
                }
            }
            private void setConstrols(float newx,float newy,Control  cons)
            {
                foreach (Control  con in cons .Controls )
                {
                    string[] mytag = con.Tag.ToString().Split(new char[] { ':' });
                    float a = Convert.ToSingle(mytag[0]) * newx;                                    con.Width = (int)a;
                    a=Convert.ToSingle(mytag[1]) * newy;
                    con.Height = (int)(a);
                    a=Convert.ToSingle(mytag[2]) * newx;
                    con.Left = (int)(a);
                    a=Convert.ToSingle(mytag[3]) * newy;
                    con.Top = (int)(a);
                    Single currentSize = Convert.ToSingle (mytag[4]) * newy;
                    con .Font =new Font (con.Font .Name ,currentSize,con.Font .Style ,con.Font .Unit );
                    if(con.Controls .Count >0)
                    {
                        setConstrols (newx ,newy ,con );
                    }
                }
            }这样在工具箱里面就添加了一个newpicturebox控件,你可以把它拖到你的窗口上用拉.
      

  4.   

    上面的代码有两个地方打错了.更正一下    public class newPictureBox : PictureBox 
        {
            public object newTag;
            public object NewTag
            {
                get
                {
                    return newTag;
                }
                set
                {
                    newTag = value;
                }
            }
        }
      

  5.   

        public class newPictureBox : PictureBox 
        {
            public object newTag;
            public object NewTag
            {
                get
                {
                    return newTag;
                }
                set
                {
                    newTag = value;
                }
            }
        }