1

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);ラベルなど、そのラベルを画面から削除するメソッドが必要です。これは、もう表示したくないためです。そのメソッドに自分のやりたいことをさせるにはどうすればよいですか? 私はすでに、 、 、およびを使用しようとしました。誰でも何か援助を提供できますか?GoodbyeLabelwriteTextToScreen();Dispose();Finalize();label = null;

4

1 に答える 1

1
new System.Windows.Forms.FlowLayoutPanel();

新しい空のパネルを作成しました。
これを変更しても、フォーム内の既存のパネルには影響しません。

フォーム上の既存のパネルを変更する必要があります。

特に、クラスを取り除き、methodsそれらのインスタンス メソッドをフォーム クラスに作成する必要があります。

にも置き換える必要がありsleepFor()ますawait Task.Delay()

于 2013-06-02T13:22:57.917 に答える