Pass Parameters to Event Listeners?

I know. This question gets asked a lot. And it usually gets the same answer: Use custom events. Well I’m sorry but after an hour of Googling, I havnt found a single useful example of ‘using custom events’ that helps me. I will post my specific problem and I hope someone can show me exactly where ‘custom events’ come in.

Suppose I want to create a bunch of buttons using a loop. But I want each button to do something different. Suppose the buttons are numbered and I simply want each button to print out its unique number when clicked. Heres what I have so far:

var t:CTextField;
for (var i:int = 1; i <= 100; i++) {								
 t = new TextField();
 t.text = "button " + i;
 t.y = 20 * i;
 t.height = 20;
 t.addEventListener(MouseEvent.MOUSE_DOWN, buttonClicked);

private function buttonClicked(e:MouseEvent):void {
 trace ("button " + ??? + " was clicked");

Ive tried many different things to get this to work, but none of them worked so I wont bother posting them all. At best, I got it so every single button traced “button 100 was clicked”. I sort of understand why that happened, but I dont know how to make it work properly.

Once again, all I could find was people saying “use custom events”, but I think I need a lot more details than that. For example, I dont see how changing

t.addEventListener(MouseEvent.MOUSE_DOWN, buttonClicked);


t.addEventListener(MySpecialMouseEvent.MOUSE_DOWN, buttonClicked);

would help anything.