2011-09-07 88 views
1

enter image description here我有一個接口派生類問題使用接口

interface Dot 
{  
    // protected Random r = new Random(); 
    void createdot(Rectangle clientrectangle, Control.ControlCollection Controls); 
} 

,我使用這個接口作爲一個基類爲我的派生類的聲明

public class BlueDot : Dot 
{ 
    public List<Label> bluedot = new List<Label>(); 
    Random r = new Random(); 

    public void createdot(Rectangle ClientRectangle, Control.ControlCollection Controls) 
    { 
     for (int i = 0; i < 5; i++) 
     { 
      var temp = new Label(); 

      temp.Location = new Point(r.Next(ClientRectangle.Right - 10), r.Next(ClientRectangle.Bottom - 20)); 
      temp.Text = "?"; 
      temp.Width = 10; 
      temp.Height = 10; 
      temp.ForeColor = System.Drawing.Color.Blue; 
      temp.BackColor = System.Drawing.Color.White; 
      Controls.Add(temp); 
      temp.Visible = true; 
      temp.Show(); 
      bluedot.Add(temp); 
     } 
    } 
} 

public class RedDot:Dot 
{ 
    public List<Label> reddot = new List<Label>(); 
    Random r = new Random(); 

    public void createdot(Rectangle Clientrectangle,Control.ControlCollection Controls) 
    { 
     for (int z = 0; z < 10; z++) 
     { 
      var temp2 = new Label(); 

      temp2.Location = new Point(r.Next(Clientrectangle.Right - 10), r.Next(Clientrectangle.Bottom - 20)); 
      temp2.Text = "?"; 
      temp2.Width = 10; 
      temp2.Height = 10; 
      temp2.ForeColor = System.Drawing.Color.Red; 
      temp2.BackColor = System.Drawing.Color.White; 
      Controls.Add(temp2); 
      temp2.Show(); 
      reddot.Add(temp2); 
     } 
    } 

他們在這裏被稱爲

BlueDot bdot = new BlueDot(); 
     RedDot rdot = new RedDot(); 
private void Form1_Load(object sender, EventArgs e) 
{ 
    this.Activate(); 
    bdot.createdot(this.ClientRectangle,this.Controls); 
    rdot.createdot(this.ClientRectangle, this.Controls);  
} 

爲什麼即使循環執行10次迭代,我也只能得到5個紅點?

這裏是樣本輸出https://www.facebook.com/photo.php?fbid=2372861522202&set=a.1600508493859.85328.1270463960&type=1,我只是無法弄清楚發生了什麼事等5個紅點,應該是10個紅點....

+0

請格式化您的問題;請參閱http://stackoverflow.com/editing-help – BoltClock

+1

它的正常前綴接口名稱與「I」,以表明它們是一個接口,所以例如,通常在名稱中使用名稱'IDOT'而不是'Dot'以上。 – Justin

+3

bdot和rdot如何初始化? –

回答

2

這裏沒有繼承問題。問題是隨機數發生器。

嘗試這一行代碼:

temp2.Location = new Point(10 * z, 10 * z); 

更換

temp2.Location = new Point(r.Next(Clientrectangle.Right - 10), r.Next(Clientrectangle.Bottom - 20)); 

你會看到你的5藍 - 標籤和你的10個紅色 - 標籤

「?」 「?」

解決隨機數字發生器的弱點問題試試播種你的隨機數字發生器。例如:

Random r = new Random((int)DateTime.Now.Ticks); 
+0

反正z是什麼? – jeo

+0

@jeo檢查您的代碼! z是for循環中的變量。 – tzup

+0

我現在看到了我的10個紅點......但是......它的對角位置,我需要它被分散...... – jeo

0

我並不知道,但爲什麼沒有你讓你的temp2可見?

temp2.​​Visible =真

如果這dowsn't工作,你可以同時提供您的輸出的屏幕截圖。有時由於窗口的大小,一個點可能會位於另一個點上。我的意思是他們確實重疊。看到你的輸出可能有助於理清你的問題

+0

如何發佈圖像/截圖? ?? – jeo

+0

這不是問題,它的輸出,我不知道什麼是錯誤的輸出 – jeo

+0

現在得到了圖片先生。看看 – jeo