Скажет, у меня есть этот код для формы окон:Удаления этикетки из формы Windows, когда он больше не нужен
public Form1()
{
this.Shown += new EventHandler(Form1_Shown);
InitializeComponent();
}
// - This Form1_Shown class is what's done AFTER the form is shown! Put stuff here!
private void Form1_Shown(object sender, System.EventArgs e)
{
methods.WriteTextToScreen("HelloLabel", "Hello!", 15, 15);
methods.sleepFor(1);
methods.EraseScreenLabel(Form1.HelloLabel);
methods.WriteTextToScreen("GoodbyeLabel", "Goodbye!", 80, 80);
methods.sleepFor(3);
methods.EraseScreenLabel(Form.GoodbyeLabel);
}
public class methods
{
public static int timeSlept;
public static Label[] UsedTextBoxes = new Label[10000000000000000000];
public static void WriteTextToScreen(string name, string text, int locX, int locY)
{
int numberOfPrintedItems = methods.UsedTextBoxes.GetLength(1);
Label tempLabel = new Label();
UsedTextBoxes[numberOfPrintedItems + 1] = tempLabel;
tempLabel.Text = text;
tempLabel.Name = name;
tempLabel.Location = new Point(locX, locY);
tempLabel.Visible = true;
tempLabel.Enabled = true;
}
public static void EraseScreenLabel(Label label)
{
System.Windows.Forms.FlowLayoutPanel obj = new System.Windows.Forms.FlowLayoutPanel();
obj.Controls.Remove(label);
label = null;
}
public static void sleepFor(int seconds)
{
timeSlept = 0;
System.Timers.Timer newTimer = new System.Timers.Timer();
newTimer.Interval = 1000;
newTimer.AutoReset = true;
newTimer.Elapsed += new System.Timers.ElapsedEventHandler(newTimer_Elapsed);
newTimer.Start();
while (timeSlept < seconds)
{
Application.DoEvents();
}
newTimer.Dispose();
}
public static void newTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timeSlept = IncreaseTimerValues(ref timeSlept);
Application.DoEvents();
}
public static int IncreaseTimerValues(ref int x)
{
int returnThis = x + 1;
return returnThis;
}
Я хочу метод EraseScreenLabel(Label label);
удалить этот ярлык с экрана, например, GoodbyeLabel
созданных метод writeTextToScreen();
, так как я не хочу, чтобы он был видимым больше. Как я могу заставить этот метод делать то, что я хочу? Я уже пытался использовать Dispose();
и Finalize();
, а также label = null;
. Может ли кто-нибудь помочь?
Вы совершаете несколько грехов в этом коде. Ядро для написания кода пользовательского интерфейса - это ** никогда не спящий. Это просто не работает, пользовательский интерфейс * заморожен * во время сна и не может перерисовать себя. Создание массива с 10000000000000000000 элементов также не может работать. Лучше всего работать с примерами или упражнениями в книге о программировании .NET, чтобы узнать правильный способ написания кода на C#. –
@HansPassant: Это намного хуже. Он использует 'DoEvents()' и ненужный фоновый поток для эмуляции 'await Task.Delay'. – SLaks