开发者

derived class problem using interface

开发者 https://www.devze.com 2023-04-03 09:45 出处:网络
I have a interface interface Dot { // protected Random r = new Random(); void createdot(Rectangle clientrectangle, Control.ControlCollection Controls);

derived class problem  using interface

I have a interface

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

and I use this interface as a base class for my derived classes as stated

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);
        }
    }
}

and

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);
        }
    }

and they are called here

BlueDot bdot = new BlueDot();
        RedDot rdot = new RedDot();
private void Form1_Load(object sender, EventArgs e)
{
开发者_如何学Go    this.Activate();
    bdot.createdot(this.ClientRectangle,this.Controls);
    rdot.createdot(this.ClientRectangle, this.Controls);       
}

Why is it that I keep getting only 5 red dots even if the loop performs 10 iterations?

here is the sample output https://www.facebook.com/photo.php?fbid=2372861522202&set=a.1600508493859.85328.1270463960&type=1 , i just cant figure out what happened to the other 5 red dots, it should be 10 red dots....


There is no inheritance problem here. The problem is the random number generator.

Try this line in your code:

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

Replacing

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

You'll see your 5 blue "?"-labels and your 10 red "?"-labels

To solve the problem of the weak random number generator try seeding your random number generator. Example:

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


I am not that sure, but why aren't you making your temp2 visible ????

temp2.Visible=true

If this dowsn't work can you provide a screen shot of both your output. Sometimes due to the size of the window one dot may reside over another. I mean they actually overlap. Seeing your output may help to sort out your problem

0

精彩评论

暂无评论...
验证码 换一张
取 消