Announcement

Collapse
No announcement yet.

Was sind geschützte Methoden?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Was sind geschützte Methoden?

    hallo, einen schönen Tag zusammen.

    Mein Problem:
    Ich habe ein DataGridView und einen Button. Und wenn auf den Button geklickt wird soll im DataGridView die nächste Zeile selektiert werden.

    Jetzt habe ich in der Hilfe eine Methode namens :ProcessDownKey
    (Verarbeitet die NACH-UNTEN-TASTE.) gefunden.

    Doch daneben ist ein kleiner gelber Schlüssel und das heist anscheinend, dass das eine geschützte Methode ist.

    Jetzt hab ich noch nie mit geschützten Methoden zu tun gehabt und weis nicht wie man die aufrufen kann. Hab auch schon ne Stunde mit google gesucht, aber nur gefunden wie man sich geschützte Methoden selber macht.

    Vielleicht weis ja jemand etwas darüber.

    Danke schon im voraus

    mfg grüni

  • #2
    Hallo,

    geschützte Member (somit auch Methoden) sind mit dem Zugriffmodifizierer "protected" dekoriert.

    Ein Zugriffsmodifizierer bestimmt die "Sichtbarkeit" eines Member. Dies kann sein dass der Member von überall sichtbar ist (public), nur innerhalb des Projektes (internal), nur innerhalb der Klasse (private).

    Bei Vererbung gibt es noch den "Sonderfall" des geschützten Members. Dieser kann nur in der Basisklasse sowie davon abgeleiteten Klasse gesehen werden.

    Auf dein Beispiel umgemünzt heißt das, dass du vom DataGridView (DGV) erben musst um auf die geschützte Methode zugreifen zu können. Dies ist ganz einfach:
    [highlight=c#]
    public class MeinDataGridView : DataGridView
    {
    protected override void OnKeyDown(KeyEventArgs e)
    {
    base.OnKeyDown(e);

    // Dein Code:
    }
    }
    [/highlight]
    Somit erstellst du ein neues Steuerelement (hier DGV) das geändert/erweitert wird.
    Zusätzlich wird dabei mit "override" dem Compiler mitgeteilt dass diese Methode überschrieben wird. Mit "base.XXX" wird die Methode in der Basisklasse aufgerufen und dann folgt dein Code.

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Wobei wenn du die von Gü gezeigte richtigen Erklärung zur Lösung deines Problem heranziehst du wohl zu einer möglicherweise überdimensionierten Lösung kommst.

      Du willst doch nur die Navigation im Grid von außen steuern. Da sollte eine Ableitung unnötig sein. Deine Datenmenge hast du ja wahrscheinlich über eine BindingSource an das DataGridView gebunden. Die Navigation erfolgt dann einfach über die BindingSource. Also in deinem Fall einfach über BindingSource.MoveNext();

      Ohne BindingSource ist es etwas komplizierter. Da müßte man in etwa so vorgehen.

      Code:
       
          if (dataGridView1.CurrentRow.Index < dataGridView1.Rows.Count)
          {
              // eventuell hier noch die vorherige Row deselektieren.
              dataGridView1.Rows[dataGridView1.CurrentRow.Index + 1].Selected = true;
          }
      Zuletzt editiert von Ralf Jansen; 13.05.2009, 12:06. Reason: Hab den Down Key fälschlicherweise für einen DialogKey gehalten

      Comment


      • #4
        Alternativ kann man auch den BindingNavigator benutzen und alle nicht benötigten Knöpfe ausblenden.

        Comment


        • #5
          Danke für eure Vorschläge, hab damit ein wenig herumprobiert.
          Ich hab aber dann was besseres als den ProcessDownKey gefunden:

          private void Down_Click(object sender, EventArgs e)
          {

          grid.Focus();
          SendKeys.Send("{DOWN}");
          }

          funktioniert hervorragend

          mfg grüni

          Comment

          Working...
          X