AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Container-Klassen in C#

Ein Thema von Luckie · begonnen am 15. Nov 2007 · letzter Beitrag vom 15. Nov 2007
 
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#12

Re: Container-Klassen in C#

  Alt 15. Nov 2007, 14:57
Zitat von Luckie:
Ist da irgendein schwerwiegender Fehler drin?
Ja, eine Menge unnötigen Code.
Kompilere einmal dein Projekt, gehe jetzt mal in den Form designer und oben im Menü klickst du auf du Data\Show data sources.
Nun legst du in dem neuen Toolwindow eine neue Data source an, im Dialog wählst du Object aus und im nächsten Schritt kannst du deine Klasse "Person" auswählen -> Finish.
Jetzt kannst du einfach die Eigenschaften Name und Vorname auf dein Formular.
Die Textboxes sind jetzt an diese beiden Eigenschaften in der PersonBindingSource gebunden, die ebenfalls auf dem Form liegt.
Willst du den Navigator nicht haben, kannst du ihn einfach löschen.
Jetzt noch eine ListBox auf dein Form ziehen, und ihr als DataSource die personBindingSource verpassen.


Mehr muss im Form nicht stehen, um all das zu können, was dein Code gemacht hat:

Code:
public partial class Form1 : Form
{
  readonly BindingList<Person> persons = new BindingList<Person>();

  public Form1()
  {
    InitializeComponent();
    personBindingSource.DataSource = persons;
  }

  private void personBindingSource_ListChanged(object sender, ListChangedEventArgs e)
  {
    deleteButton.Enabled = personBindingSource.Position != -1;
    nameTextBox.Enabled   = deleteButton.Enabled;
    vornameTextBox.Enabled = deleteButton.Enabled;
  }

  private void addButton_Click(object sender, EventArgs e)
  {
    personBindingSource.AddNew();
  }

  private void deleteButton_Click(object sender, EventArgs e)
  {
    personBindingSource.RemoveCurrent();
  }
}

In der Klasse würd ich halt INotifyPropertyChange implementieren, um die UI (oder andere) über Änderungen informieren zu können.
Außerdem habe ich noch ToString überschrieben, da das der Defaultwert ist, den eine ListBox darstellt.
Code:
public class Person : INotifyPropertyChanged
{
  string name;
  string vorname;

  public override string ToString()
  {
    return name + ", " + vorname;
  }

  public string Name
  {
    get { return name; }
    set
    {
      if (name == value) return;

      name = value;
      RaisePropertyChanged("Name");
    }
  }

  public string Vorname
  {
    get { return vorname; }
    set
    {
      if (vorname == value) return;

      vorname = value;
      RaisePropertyChanged("Name");
    }
  }

  public event PropertyChangedEventHandler PropertyChanged;
  protected void RaisePropertyChanged(string propertyName)
  {
    PropertyChangedEventHandler h = PropertyChanged;

    if (h != null)
      h(this, new PropertyChangedEventArgs(propertyName));

  }
}
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz