【问题标题】:C# I create a new Picturebox and now my Textboxes won't give me any values backC# 我创建了一个新的图片框,现在我的文本框不会给我任何值
【发布时间】:2018-04-25 03:28:48
【问题描述】:

我正在通过代码创建一个新的图片框,但现在我的文本框没有给我任何值。我认为他们失去了焦点,或者他们的控件不再工作,这是到目前为止的代码:

private void button1_Click(object sender, EventArgs e)
    {

        int ErrorCode = 0;
        string NewName = NewPointName.Text;
        int X, Y;

        Application.DoEvents();

        if (NewPointName.Text == "")
            ErrorCode = 1;
        else
            for (int i = 0; i < Names + 1; i++)
            {
                if (PointName[i] == NewName)
                    ErrorCode = 2;
            }
        if (ErrorCode > 0)
            MessageBox.Show("Error " + ErrorCode);
        else
        {
            if (Convert.ToInt32(NewPointXBox.Text) > 60)
                X = 60;
            else if (Convert.ToInt32(NewPointXBox.Text) < -60)
                X = -60;
            else if (NewPointXBox.Text == "")
                X = 0;
            else
                X = Convert.ToInt32(NewPointXBox.Text);

            if (Convert.ToInt32(NewPointYBox.Text) > 60)
                Y = 60;
            else if (Convert.ToInt32(NewPointYBox.Text) < -60)
                Y = -60;
            else if (NewPointYBox.Text == "")
                Y = 0;
            else
                Y = Convert.ToInt32(NewPointYBox.Text);

            Punkt.GiveName(NewName, Names);
            Punkt.GiveCoordinates(X, Y, Names);
            PointName[Names] = NewName;
            NewPointName.Text = "";
            NewPointXBox.Text = "";
            NewPointYBox.Text = "";
            Application.DoEvents();
            UpdatePoint();
            CreatePoint(X, Y, NewName, Names);
            Names++;
            ErrorCode = 0;
            NewName = "";
        }


    }

 public void CreatePoint(int X, int Y, string name, int i)
        {
            int StartPointX = 450, StartPointY = 450, Factor = 7;
            if (RadioG6060.Checked)
            {
                StartPointX = 454;
                StartPointY = 449;
                Factor = 7;
            }

            Dot[i] = new PictureBox();
            this.Controls.Add(Dot[i]);
            Dot[i].Name = "PB_" + name;
            Dot[i].Size = new Size(10, 10);
            Dot[i].Image = Image.FromFile("../Dot.png");
            Dot[i].Anchor = AnchorStyles.Left;
            Dot[i].Location = new Point(StartPointX, StartPointY);
            Dot[i].Visible = true;
            InitializeComponent();
            Dot[i].BringToFront();
            Dot[i].Location = new Point(Dot[i].Location.X + (X * Factor), Dot[i].Location.Y - (Y * Factor));
            Application.DoEvents();
        }

我认为是 this.controls.Add(Dot[i]) 把它扔掉了,因为现在我无法访问我的 NewPointName 文本框中的文本。

我怎样才能让程序重新回到表单上,或者做任何可以再次激活框的事情?

【问题讨论】:

  • 你是什么意思你不能“访问我的NewPointName文本框中的文本”?你想做什么,怎么不工作/你得到什么结果? -- 还有,你为什么到处打电话Application.DoEvents()
  • 我希望您知道,在您的代码底部,您清除了 NewPointName 文本框的值:NewPointName.Text = "";
  • 我知道,但是它们在程序的 UI 中被覆盖了。
  • “覆盖”是什么意思?它们是空的,还是你的图片框放在它们上面,覆盖它们?如果是前者:那就是它的工作原理。如果您更改 Text 属性,那么 UI 中显示的内容也会发生变化。
  • 不,我的意思是我想在文本框中写入文本,但它没有使用该文本,它使用的是我输入的空字符串。如果我把它排除在外,它使用的是我最后一件事盒子里写的,不是新的。它阻止了文本框的外部控制。

标签: c# controls focus


【解决方案1】:

我刚刚解决了这个问题,我只需要省略InitializeComponent(),然后它就起作用了。事实证明,如果您这样做,已经存在的组件将被阻止,并且无法再在其自身的任何选项中进行更改。

【讨论】:

  • 啊,我在用手机阅读时错过了那条线。是的,您不应该多次致电InitializeComponent()。它所做的只是为通过设计器添加的控件设置属性。 InitializeComponent() 应该只被调用一次,并且在表单的构造函数中。
猜你喜欢
  • 2020-07-13
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
相关资源
最近更新 更多