2009-04-25 20 views
1

Ich habe ein Programm, ich möchte, dass jede Person ihre eigene Registerkarte hat, jede Registerkarte wäre identisch, jedoch möchte ich eine Registerkarte entfernen, wenn ich muss.Hinzufügen und Entfernen von Registerkarten zur Laufzeit in C#

private void addPerson(string name) 
{ 
    TabPage tmp = new TabPage(); 
    ListView tmpList = new ListView(); 
    Button tmpButton = new Button(); 
    this.SuspendLayout(); 
    this.tabFrame.SuspendLayout(); 
    tmp.SuspendLayout(); 
    tmpList.SuspendLayout(); 
    tmpButton.SuspendLayout(); 
    ... 
    //build the controll itself 
    tmp.Controls.Add(tmpButton); 
    tmp.Controls.Add(tmpList); 
    tmp.Location = new System.Drawing.Point(4, 22); 
    tmp.Name = name.Replace(' ', '_'); 
    tmp.Padding = new System.Windows.Forms.Padding(3); 
    tmp.Size = new System.Drawing.Size(284, 240); 
    tmp.TabIndex = 3; 
    tmp.Text = name; 
    tmp.UseVisualStyleBackColor = true; 
    //add it to frame 
    this.tabFrame.Controls.Add(tmp); 
    tmpButton.ResumeLayout(true); 
    tmpList.ResumeLayout(true); 
    tmp.ResumeLayout(true); 
    this.tabFrame.ResumeLayout(true); 
    this.ResumeLayout(true); 
{ 

Name wird in der Form "Scott Chamberlain", so entferne ich die Räume und die Nutzung unterstreicht für das Namensfeld. Ich kann Tabs fein hinzufügen, zeigen sie richtig formatiert auf, aber wenn ich versuche, auf die Registerkarte mit dem Code zu entfernen:

private void removePerson(string name) 
{ 
    this.SuspendLayout(); 
    this.tabFrame.SuspendLayout(); 
    this.tabFrame.Controls.RemoveByKey(name.Replace(' ', '_')); 
    this.tabFrame.ResumeLayout(true); 
    this.ResumeLayout(true); 
} 

Die Registerkarte nicht aus meinem Programm nicht verschwindet. Was fehlt mir, um einen Tab zu entfernen?

+0

Haben Sie während des removePerson-Aufrufs Ihren Code debuggt? Sehen Sie, welche Steuerelemente der TabFrame enthält und welche Eigenschaften sie haben. –

Antwort

4

alt text http://www.codinghorror.com/blog/images/works-on-my-machine-starburst.png

Erstellen einer einfachen TabPage mit einem bestimmten Name und Hinzufügen zu Controls oder TabPages Werke und so ist das Entfernen es mit RemoveByKey sowohl auf Controls und TabPages.

Gibt es einen Code, der später den Namen ändern könnte?

+0

Ja, es stellt sich heraus, dass ich ein leeres Feld in Namen übergeben habe, ich habe den Text von einer ComboBox nicht korrekt erhalten. –

1

Verwenden Sie tabFrame.TabPages anstelle von tabFrame.Controls für die Operationen Add() und RemoveByKey().

TabPages ist eine speziellere Version von Controls, und wenn eine solche Situation auftritt, sind Sie besser mit der spezialisierteren Option.

+0

TabPageCollection bietet nicht viel mehr als ControlCollection, außer dass Sie nur TabPages hinzufügen können. – Samuel

Verwandte Themen