user1710488
user1710488

Reputation: 11

I want to display the form before the speech output

My problem is that the program speaks before the form gets displayed.

Here's the load block:

/********************
*                  *
*    Start Game    *
*                  *
********************/
private void Battleship_Load(object sender, EventArgs e)
{
    // Interface housekeeping
    lblStatus.Font = new Font("HandelGotDLig", 18);

    // fill computer board
    game.buildBoards();
    human = game.Human;
    computer = game.Computer;
    shot = game.Initialize(ref human, ref shot);

    //set up displays
    gbComputerHistory.Visible = false;
    gbHumanHistory.Visible = false;
    gbShot.Visible = false;
    lblStatus.Text = "Choose who starts";
    gbStart.Visible = true;

    // display human board
    DisplayBoard(picHuman, human, false);

    // display computer ships
    DisplayBoard(picComputer, computer, false);
    this.Refresh();

    #if SPEECH
        Say("Welcome to BATTLESHIP! Prepare to Lose!");
        Say("Choose who starts first.");
    #endif
}

I suspect I could bury it in the paint event, but then I'd have to keep track of whether it has spoken already.

I don't want it speaking every time the form is repainted.

Upvotes: 0

Views: 81

Answers (1)

matthewr
matthewr

Reputation: 4739

Try adding the speech code to the Form_Shown event. This event is raised whenever the form is shown to the user (when they can actually see it). From MSDN:

The Shown event is only raised the first time a form is displayed; subsequently minimizing, maximizing, restoring, hiding, showing, or invalidating and repainting will not raise this event.

Upvotes: 1

Related Questions