none
C# Rasgele Konumu Değiştirilen 2 PictureBox'ın Çakışmaması RRS feed

  • Soru

  • Yaptığım projede 2 adet picturebox var. Bu 2 picturebox a rasgele konum üreterek form un içinde yer değiştirtiyorum. Sorunum şudur bu iki picturebox aynı konumu yada çok yakın konumu ürettiğinde üst üste biniyor. Bunu önlemek için ne yaptıysam çözemedim. Yardımcı olur musunuz? Amaç tamamen farklı konumlarda üst üste gelmeden yada temas etmeden yer değiştirmeleri.
    9 Aralık 2019 Pazartesi 00:16

Tüm Yanıtlar

  • Cakistigi zaman değiştirin. Ornek:

    void Main()
    {
    	Random r = new Random();
    	PictureBox p1 = new PictureBox
    	{
    		ImageLocation = @"c:\samplePictures\Sunset.jpg",
    		SizeMode = PictureBoxSizeMode.StretchImage,
    		Bounds = new Rectangle { X = 0, Y = 0, Height = 100, Width = 100 }
    	};
    	PictureBox p2 = new PictureBox
    	{
    		ImageLocation = @"c:\samplePictures\winter.jpg",
    		SizeMode = PictureBoxSizeMode.StretchImage,
    		Bounds = new Rectangle { X = 150, Y = 150, Height = 100, Width = 100 }
    	};
    	System.Windows.Forms.Timer tmr = new System.Windows.Forms.Timer { Interval = 1000 };
    
    	Form f = new Form { Height = 600, Width = 800 };
    	f.Controls.Add(p1);
    	f.Controls.Add(p2);
    
    	tmr.Tick += (sender, e) =>
    	{
    		p1.Left = r.Next(f.Width) - p1.Width;
    		p1.Top = r.Next(f.Height) - p1.Height;
    		p2.Left = r.Next(f.Width) - p2.Width;
    		p2.Top = r.Next(f.Height) - p2.Height;
    
    		var b1 = p1.Bounds;
    		var b2 = p2.Bounds;
    
    		if (b1.Right > b1.Left && b1.Left < b2.Right && b1.Bottom > b2.Top && b1.Top < b2.Bottom)
    		{
    			tmr.Stop();
    			p1.SetBounds(b2.Left - p1.Width, b2.Top - p1.Height, b1.Width, b1.Height);
    		}
    	};
    
    	f.Show();
    	tmr.Start();
    }
    



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak Öneren Cihan Yakar 9 Aralık 2019 Pazartesi 19:36
    9 Aralık 2019 Pazartesi 14:53
    Yanıtlayıcı
  • Winforms için Rectangle, WPF için Rect sınıflarında çakışma kontrolü hazır gelmektedir. Örneği inceleyiniz.

    var konum1 = new Rectangle(x:100,
    						   y:100,
    						   width:800,
    						   height:600);
    
    var konum2 = new Rectangle(x: 200,
    						   y: 200,
    						   width: 830,
    						   height: 630);
    						   
    if(konum1.IntersectsWith(konum2))
    {
    	Console.WriteLine("ÇAKIŞIYOR");
    }

    Bir PictureBox'ın kapladığı alanı Rectangle cinsinden almak için ClientRectangle özelliğini kullanabilirsiniz.:

    PictureBox1.ClientRectangle
    Yapmaya çalıştığınız şey bir oyun ise çok yanlış yollarda olduğunuzu da hatırlatmak isterim.


    www.cihanyakar.com




    9 Aralık 2019 Pazartesi 15:54