При выполнении приведенного ниже кода метки в форме должны показывать значения vx
и vy
с помощью меток xVelV
и yVelV
. К сожалению, обе метки не реагируют во время цикла while
. Однако, когда программа выходит из цикла, значения затем обновляются.Неотвеченные окна формируют элементы управления внутри цикла
Я попробовал один и тот же код, определив vx
& vy
как свойства с get
& set
методами (например, тем set
метод установки значения vx
и xVelV.text
по совместительству), но до сих пор никаких изменений.
Может ли кто-нибудь выяснить, что я делаю неправильно?
примечание: есть g
вне цикла в то время (как Graphics g = panel.CreateGraphics();
), которая затем используется для рисования прямоугольников внутри блока в то время.
using System;
using System.Drawing;
using System.Windows.Forms;
namespace fff {
class FormMain : Form {
// ... some code before
private Label xVelL = new Label();
private Label yVelL = new Label();
// ... some code after
public FormMain() {
// ... some code here
this.Controls.Add(xVelV);
this.Controls.Add(yVelV);
// ... some code here
}
public void RunG() {
// ... some code here
double x = 400.0, y = 050.0, xn, yn, vx, vy, ax, ay;
// ... some code here
bool massOut = false;
while (!massOut) {
// ... some code here
vx += ax;
vy += ay;
// ****** bug is here below !!! ******
this.xVelV.Text = vx.ToString();
this.yVelV.Text = vy.ToString();
// ****** bug is here above !!! ******
xn = x + vx;
yn = y + vy;
if (xn < 0 || xn > width || yn < 0 || yn > height) {
massOut = true;
}
else {
// ... some code here
x = xn;
y = yn;
// ... some code here
}
}
}
}
}
Попробуйте добавить 'this.Refresh' после присвоения значения ваших TextBoxes. –
Механизм формы не может ничего обновить до тех пор, пока вы не закончите обработку. Вы работаете в одном и том же потоке элементов управления формы, пока не закончите цикл. Вам необходимо использовать компонент [BackgroundWorker] (https://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx) и его событие ProgressChanged для обновления UI. – Steve