日期:2014-05-18  浏览次数:21164 次

窗口变化后的问题
可能有点长,但是我说的很详细,第一个80分,谢谢:
我实现了控件的大小随窗口的变化而变化,但是 
1.
C# code

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、if( item.SubItems [n].Text==p.Tag.ToString ()) 

你这个语句很正常啊,你是不是有代码修改了PictureBox的Tag属性?你可通过设置断点检查。

2、你重绘的时间,调用控件的Invalidate()方法进行重绘
------解决方案--------------------
学習
------解决方案--------------------
但是我加入使控件的大小随窗口的大小改变为变化的代码
----->
你看下能否直接设置控件的anchor属性
------解决方案--------------------
http://topic.csdn.net/u/20080521/13/fd0f856e-467c-47e5-ac05-2cca7850b143.html
两个贴内容一样.
你着段代码是干什么的呢?tag里面存放的是什么呢?不能用其他方法、自定义属性或是变量来替换吗?
提示为picutrebox添加一个新的属性newTag 

C# code

    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