Out of nowhere, the Windy City ThunderBolts offense has started to roll.

On a night when everyone contributed, Evan Button proved to be the T-Bolts’ biggest hero.

Button drove a go-ahead triple down the right-field line in the bottom of the eighth inning as Windy City rallied from a 7-5 deficit for a 9-7 win Friday over the Evansville Otters at Standard Bank Stadium in Crestwood.

Button’s second RBI hit of the night drove in Doug Joyce (2-for-4), who had started the bottom of the eighth with a double.

“I had been hitting the ball hard, but I was getting out in front,” Button said. “I tried not to get frustrated. I didn’t stop being aggressive. Obviously, a triple was the best-case scenario there.”

The T-Bolts (26-34) have won three straight for the first time since winning four in a row from June 8 to 13.

Button came home on Mike Torres’ sacrifice fly for an insurance run.

Seven Windy City hitters drove in at least one run and all nine in the lineup either drove in a run or scored one.

“It’s contagious,” Button said. “We saw it with Gateway (earlier in the week) where every at-bat they put the barrel on the ball. We were in a coma offensively then, but now it’s turned our way. It makes for a happy clubhouse.”

The rally made a winner out of Markus Solbach (1-0), who bounced back from a three-run sixth to toss scoreless seventh and eighth innings for his first Windy City victory.

Michael Click worked around two hits in the ninth to gain his 14th save.

In the back-and-forth battle, Evansville (28-30) took a 7-5 lead with the three-run sixth.

Windy City got a run back in the bottom of the frame when Button singled home Chase Tucker.

The T-Bolts drew even in the seventh. Ryan Soares (2-for-4) singled, moved to second when Chad Cregar walked, took third on Zach Aakhus’ sacrifice bunt and scored on a groundout from Kyle Robinson.

Evansville doubled three times off Windy City starter Daniel Cropper in the first to take a 2-0 lead, but the hosts scored three times in the second.

Robinson doubled in Aakhus (hit by pitch) to start the second-inning scoring before Andrew Brauer (2-for-4) singled home Robinson. Brauer moved to third on Joyce’s base hit and came in on Tucker’s sacrifice fly to give the T-Bolts the 3-2 lead.

Evansville pulled starter Ryan Gibson after just two innings. He surrendered three earned runs on three hits.

The Otters scored once each in the third and fifth to reclaim the lead and chase Cropper, who labored through five innings and threw 94 pitches. Cropper gave up four earned runs on nine hits, striking out two and walking one.

The T-Bolts grabbed the lead right back in the bottom of the fifth as Soares and Cregar produced consecutive two-out RBI singles after an error on Evansville first baseman Nick Schwaner allowed the inning to continue.

“We’ve been preaching to the guys about RBI situations and not trying to do too much,” T-Bolts manager Ron Biga said. “We’re executing.”