为了账号安全,请及时绑定邮箱和手机立即绑定

按下按钮时如何创建任意数量的对象实例 c# winforms

按下按钮时如何创建任意数量的对象实例 c# winforms

C#
慕尼黑的夜晚无繁华 2021-12-05 16:47:28
在我的代码中,每次按下 button1 时,面板中都会生成一个名为 NOT 的图片框实例。当图像被单击并按住时,可以四处拖动。我的问题是每次按下按钮 1 时,我都希望创建另一个具有相同属性的图片框,这样理论上我可以整天按下按钮 1 并根据需要拖动尽可能多的非图片框对象。到目前为止,一旦按下按钮,只会创建一个 NOT 实例,而无法生成另一个实例。所以基本上如何在每次按下 button1 时创建 NOT 的新唯一实例。public Form1()    {        InitializeComponent();        Drag();    }    private void button1_Click(object sender, EventArgs e)    {        spawnGate("not");    }    PictureBox NOT = new PictureBox();    private Point startPoint = new Point();    public void Drag()    {        NOT.MouseDown += (ss, ee) =>        {            if (ee.Button == System.Windows.Forms.MouseButtons.Left)            {                startPoint = Control.MousePosition;            }        };        NOT.MouseMove += (ss, ee) =>        {            if (ee.Button == System.Windows.Forms.MouseButtons.Left)            {                Point temp = Control.MousePosition;                Point res = new Point(startPoint.X - temp.X, startPoint.Y - temp.Y);                NOT.Location = new Point(NOT.Location.X - res.X, NOT.Location.Y - res.Y);                startPoint = temp;            }        };    }    public void spawnGate(string type)    {        switch (type)        {            case "not":                NOT.Width = 100;                NOT.Height = 50;                NOT.Image = Properties.Resources.Not_gate;                NOT.SizeMode = PictureBoxSizeMode.Zoom;                workspace.Controls.Add(NOT);            break;        }    }}
查看完整描述

2 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

更改NOT为List<PictureBox>.


然后,在方法中添加一个new PictureBox实例。请注意,需要更改以获取参数。NOTspawnGate()Drag()PictureBox


编辑:根据评论中的要求,为了访问此问题的其他人的利益,这里正是需要更改代码才能获得 OP 请求的行为的方法。请注意,此设计可以而且应该在几个方面进行重构。


List<PictureBox> NOT = new List<PictureBox>();

Point startPoint = new Point();


public Form1()

{

    InitializeComponent();

    Drag();

}


private void button1_Click(object sender, EventArgs e)

{

    spawnGate();

}


public void spawnGate()

{

    var pictureBox = new PictureBox()

    {

        Width = 100,

        Height = 50,

        Image = Properties.Resources.Not_gate,

        SizeMode = PictureBoxSizeMode.Zoom       

    }


    Drag(pictureBox);


    NOT.Add(pictureBox);


    workspace.Controls.Add(pictureBox);

}


public void Drag(PictureBox pictureBox)

{

    pictureBox.MouseDown += (ss, ee) => 

    {

        if (ee.Button == System.Windows.Forms.MouseButtons.Left)

            startPoint = Control.MousePosition;

    };


    pictureBox.MouseMove += (ss, ee) =>

    {

        if (ee.Button == System.Windows.Forms.MouseButtons.Left)

        {

            Point temp = Control.MousePosition;

            Point res = new Point(startPoint.X - temp.X, startPoint.Y - temp.Y);


            pictureBox.Location = new Point(pictureBox.Location.X - pictureBox.X, pictureBox.Location.Y - res.Y);


            startPoint = temp;

        }

    };

}


查看完整回答
反对 回复 2021-12-05
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您不必直接在表单上保存指向 NOT 的指针(或者,如果您以后需要调用它们,可以将它们保存到列表中)。


public Form1()

{

    InitializeComponent();

}


private void button1_Click(object sender, EventArgs e)

{

    spawnGate("not");

}


// This list is optional, if you easily want to find them later

List<PictureBox> allNOTs = new List<PictureBox>();


public void spawnGate(string type)

{

    switch (type)

    {

        case "not":

            PictureBox NOT = new PictureBox();

            NOT.Width = 100;

            NOT.Height = 50;

            NOT.Image = Properties.Resources.Not_gate;

            NOT.SizeMode = PictureBoxSizeMode.Zoom;

            NOT.MouseDown += (ss, ee) =>

            {

                // Mouse down event code here

            };

            NOT.MouseMove += (ss, ee) =>

            {

                // Mouse move event code here

            };

            allNOTS.Add(NOT); // Optional if you easily want to find it later

            workspace.Controls.Add(NOT);

        break;

    }

}

}


查看完整回答
反对 回复 2021-12-05
  • 2 回答
  • 0 关注
  • 229 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信