namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        int x, y;
      
        public Form1()
        {
            InitializeComponent();
        }        private void button1_Click(object sender, EventArgs e)
        {            x = int.Parse(textBox1.Text); y = int.Parse(textBox2.Text); 
            Child child = new Child(x, y);    //在初始坐标(x,y)画 新的 图形     
           
                        
        }        private void button2_Click(object sender, EventArgs e)
        {
            x = int.Parse(textBox1.Text); y = int.Parse(textBox2.Text); 
            child.config(50,50);   //跟踪新坐标(x,y)重画该图形
           
        }       
    }
}
namespace WindowsApplication1
{
     class Child
    {
         
         public Child(int x,int y)
         {
             //在初始坐标(x,y)画图形
         }
        
            public void config(int x,int y)
        {
          //跟据新坐标(x,y)重画图形
            
        }
    }
}Child类是一个跟据坐标画图形(如画圆)的类
我的目的是button1_Click跟据坐标创建一个图形,然后button2_Click跟据新坐标改变该图形的位置(重画)
当我第一次执行button1_Click后,要求每次button2_click执行改变的是同一个对象,直到重新单击button1_click创建新的对象以前学的是面向过程的,觉得弄个全局变量之类的就可以了,可最近刚学习C#,对面向对象的编程方法不太熟悉..
如果用我上面写的button2_Click如预料的提示不存在child这个实例..
请问应该怎样设计才能达到要求.谢谢!

解决方案 »

  1.   

    楼主把Child声明为全局类型即可:
    Child   child   =   new   Child(x,   y);这句声明放在button1_Click外,即和你声明的x,y在一起声明
      

  2.   

                Child   child = null;
                    public   Form1() 
                    { 
                            InitializeComponent(); 
                    }                 private   void   button1_Click(object   sender,   EventArgs   e) 
                    {                         Draw();
                    }                 private   void   button2_Click(object   sender,   EventArgs   e) 
                    { 
                          Draw();
                    } 
                  
                  private void Draw()
    {                        int x   =   int.Parse(textBox1.Text);   
                            int y   =   int.Parse(textBox2.Text);  
                            if (child = null)  child   =   new   Child(x,   y);
                            else child.config(x,y); 
    }
      

  3.   

    请问lovefootball, 
     if   (child   =   null)     child=  new   Child(x,       y); 
        else   child.config(x,y);   

    这样第二次以上执行时就没能创建新对象了...
      

  4.   

    关于模式:)
    http://terrylee.cnblogs.com/archive/2005/12/09/293509.html
      

  5.   

    单件模式(Singleton Pattern)保证一个类仅有一个实例,并提供一个访问它的全局访问点。 
      

  6.   

    ydsunny说的我听不太明白,我笨~~~ 请问wyw1997
    我想class Singleton对应的就是我上面的class Client吧
     1public sealed class Singleton
     2{
     3    static Singleton instance=null;
     4
     5    Singleton()
     6    {
     7    }
     8
     9    public static Singleton Instance
    10    {
    11        get
    12        {
    13            if (instance==null)
    14            {
    15                instance = new Singleton();
    16            }
    17            return instance;
    18        }
    19    }
    20}但是static Singleton instance=null;是静态的,当第二次创建Singleton的时候(instance就不null了),这时
    return instance不就成了上一次的new Singleton()的实例了吗?我刚学c#可能理解有误,能否就我上面的例子给个实例.不胜感激! 我是想实现俄罗斯方块那样的游戏,我想创建一个对象(积木),然后控制该对象(积木)的位置,直到该对象(积木)落在地上了,再重新创建一个新对象,这时控制的就是这个新的对象的方向了...
      

  7.   


     public partial class Form1 : Form
        {
            int x, y;        IList<Child> clist = new List<Child>();//声明一个泛型集合        public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {            x = int.Parse(textBox1.Text); y = int.Parse(textBox2.Text);
                Child child = new Child(x, y);         //在初始坐标(x,y)画   新的   图形             clist.Add(child);//把声明的对象放到集合里
            }        private void button2_Click(object sender, EventArgs e)
            {
                x = int.Parse(textBox1.Text); y = int.Parse(textBox2.Text);
                //child.config(50, 50);     //跟踪新坐标(x,y)重画该图形             clist[0].config(50, 50);//操作集合里的对象        }
        } 
      

  8.   

    Child child = null; 
    public Form1()   
    {   
        InitializeComponent();   
    }   private void button1_Click(object sender, EventArgs e)   
    {   
        int x = int.Parse(textBox1.Text);
        int y = int.Parse(textBox2.Text);
        child = new Child(x, y); 
    }   private void button2_Click(object sender, EventArgs e)   
    {   
        if (child == null) return;    
        int x = int.Parse(textBox1.Text);
        int y = int.Parse(textBox2.Text);
        child.config(x,y);   
    }