Er det Name propertyen du vil kende ? Eller er det klassenavnet ? Ovenstående kode virker kun på klasser der arver fra System.Windows.Forms.Control; altså de fleste klasser der kan generer en MouseClick event.
Hvis du ikke har sat Name, er det en tom streng. Se flg. eksempel: public class MyWindow : Form { private Button b1;
public static void Main(string [] args) { Application.Run(new MyWindow());
}
public MyWindow() { b1 = new Button(); b1.Name = "MyButton"; b1.Text = "Click me"; b1.Click +=new EventHandler(b1_Click); this.Controls.Add(b1); }
private void b1_Click(object sender, EventArgs e) { if ( sender is Control ) MessageBox.Show(this,((Control)sender).Name); } } Prøv at udkommentere linjen med b1.Name = MyButton. Så vises der netop en tom messagebox.
Hvis du istedet forventede at messagebox'en skulle vise "b1", så kan det ikke lade sig gøre. b1 er navnet på en reference til objektet, og det er ikke tilgængeligt run-time (det giver heller ingen mening at det skulle være det).
Hvad er dit problem ? At du ikke kan skelne de enkelte objekter fra hinanden ?
I så fald er du nødt til at tildele dem noget information, der kan hjælpe dig. Name property'en kunne f.eks. bruges til det. Der er et fint eksempel i docs hvis du slår op under Control.Name. Udsnit derfra:
Control.Name. Gets or sets the name of the control.
[C#] public string Name {get; set;}
Property Value The name of the control. The default is an empty string ("").
Remarks The Name property can be used at run time to evaluate the object by name rather than type and programmatic name. Because the Name property returns a String type, it can be evaluated in case-style logic statements (Select statement in Visual Basic, switch statement in C# and C++).
for ( int i = 0 ; i < 5 ; i++ ) { lb[i] = new ListBox(); lb[i].Name = "lb" + i.ToString(); }
f.eks.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.