문제가 있습니다. 레이블로 스크롤 효과를 만들어야합니다. 본질은 값을 1 초 지연으로 레이블에 넣는 것입니다. 배열의 각 레이블 번호에 대해 생성하는 함수가 있습니다. 그러나 즉시 발생하고 지연을 시도했다. Timer
을 사용했지만 결과가 전혀 없거나 올바르게 사용하는 방법을 모르겠습니다. 또한 Thread.Sleep()
을 사용해 보았지만 예상 결과가 나지 않습니다.지연을 사용하는 라벨의 스크롤 효과 C#
public void generator() // присваивание текстбоксам значений
{
int[] array = getUniqueRandomArray(1, 81, 20).ToArray();
green = 0;
for (int i = 0; i < array.Length; i++)
{
panel1.Controls[i].Text = array[i].ToString();
Thread.Sleep(350);
panel1.Controls[i].Refresh();
foreach (DataGridViewRow currentRow in dataGridView1.Rows)
{
foreach (DataGridViewCell currentCell in currentRow.Cells)
{
if (Convert.ToInt32(currentCell.Value) == array[i] && currentCell.Style.BackColor == Color.Yellow)
{
currentCell.Style.BackColor = Color.Green;
green++;
panel1.Controls[i].BackColor = Color.Green;
}
}
}
}
}
getUniqueRandomArray(1, 81, 20)
-이 기능은 1 내지 80의 배열을 생성하고, (20) 수를 반환한다.
Thread.Sleep(350)
을 사용할 때 양식이 얼어 버리면 각 레이블은 350ms 지연된 배열에서 값을 가져옵니다. 이 버튼을 한 번 더 누르면 이전 값을 지우지 않고 현재 값이 이전 값으로 대체됩니다.
for (int i = 0; i < panel1.Controls.Count; i++)
{
panel1.Controls[i].BackColor = Color.White;
panel1.Controls[i].Text = null;
}
실제 결과입니다. 하지만 동그라미가 실행되는 동안 양식을 사용할 수있게 해주는 또 다른 스레드에서 동결하지 않고 설명 된 지침을 수행 할 것으로 기대합니다.
마지막으로 나는 더 명확하게 설명하려고합니다.
20 개의 레이블과 20 개의 숫자가 있습니다. label1 = "1"-> (wait 1s) -> label2 = "2"-> (wait 1s) ... 등과 같은 번호를 할당해야합니다.
감사합니다. :)
예상되는 결과와 실제 결과를 제공하여 실패하는 방식을 설명하면 도움이됩니다. – lamandy
완료. 나는 그것이 내 생각을 뒷받침하는 데 도움이 되었으면 좋겠다 :) – Syncmaxim
UI 스레드에서'Thread.Sleep'을 호출하면 안됩니다. 당신의 메소드를 async로 만들고'await Task.Delay()'를 사용하십시오. –