vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2021
 
zurück
Rubrik:    |   VB-Versionen: VB4, VB5, VB601.02.03
AutoEdit-Funktion für das MSFlexGrid

Auch wenn das FlexGrid-Control es nicht direkt unterstützt - mit ein paar Zeilen Code und einer zusätzlichen TextBox statten Sie das FlexGrid-Control mit einer AutoEdit-Funktion aus.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  1.080 
http://www.tools4vb.de/System:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt 

Das Microsoft FlexGrid Control ist bei den Entwicklern - wie man im Forum immer wieder hört - im regen Einsatz. Egal, ob mit Datenbank-Anbindung oder als "Unbound"-Grid. Für kleinere Datenmengen ist das FlexGrid ja auch durchaus zu gebrauchen.

Was dem FlexGrid Control aber in jedem Fall fehlt, ist eine AutoEdit-Funktion, d.h. dass der Anwender z.B. durch Doppelklick auf eine Zelle deren Inhalt direkt im Grid verändern kann.

Um das FlexGrid mit dieser fehlenden Funktion nachzurüsten, bedarf es auch gar nicht viel

Alles was wir benötigen ist eine zusätzliche, zunächst unsichtbare TextBox (txtEdit) auf der Form. Im DblClick-Ereignis des FlexGrid-Controls ermitteln wir die Zelle unter dem Mauszeiger, dann die exakte Position der Zelle, so dass wir nun die Textbox genau über die Zelle platzieren und sichtbar machen.

Option Explicit
 
' aktuelle Zelle, die editiert wird
Private m_Row As Long
Private m_Col As Long
Private Sub MSFlexGrid1_DblClick()
  With MSFlexGrid1
    ' Gültige Zelle?
    If .MouseCol > .FixedCols And .MouseRow > .FixedRows Then
      txtEdit.Move .Left + .CellLeft, .Top + .CellTop, _
        .CellWidth, .CellHeight
 
      ' Zelle "merken
      m_Row = .MouseRow: m_Col = .MouseCol
 
      ' Zelleninhalt auslesen und in die 
      ' Textbox übertragen
      txtEdit.Text = .TextMatrix(m_Row, m_Col)
 
      ' TextBox sichtbar machen und Fokus setzen
      txtEdit.Visible = True
      txtEdit.SetFocus
    End If
  End With
End Sub

So, jetzt lässt sich die Zelle schon mal editieren. Was fehlt jetzt noch? Genau! Der geänderte Text muss wieder ins FlexGrid übertragen werden - und zwar dann, wenn der Anwender die Enter-Taste drückt. Und bei dieser Gelegenheit: Drückt der Anwender die ESC-Taste soll die TextBox wieder "verschwinden" - ohne Textübertragung.

Private Sub txtEdit_KeyPress(KeyAscii As Integer)
  With MSFlexGrid1
    If KeyAscii = 13 Then
      ' ENTER: Text ins Grid übertragen 
      ' und TextBox ausblenden
      KeyAscii = 0
      .TextMatrix(m_Row, m_Col) = txtEdit.Text
      txtEdit.Visible = False
 
      ' Fokus auf das FlexGrid setzen
      .Row = m_Row: .Col = m_Col
      .SetFocus
 
    ElseIf KeyAscii = 27 Then
      ' ESC: Eingabe abbrechen
      KeyAscii = 0
      txtEdit.Visible = False
      .Row = m_Row: .Col = m_Col
      .SetFocus
    End If
  End With
End Sub

Das funktioniert jetzt schon recht gut. Aber etwas fehlt immer noch Und zwar sollte die TextBox auch dann wieder "verschwinden", wenn der Anwender im EditMode auf eine andere Zelle im FlexGrid klickt:

Private Sub MSFlexGrid1_GotFocus()
  ' Falls TextBox nocht sichtbar ist, 
  ' jetzt ausblenden
  If txtEdit.Visible Then txtEdit.Visible = False
End Sub

So, das war jetzt erst einmal. Ab sofort verfügt Ihr MSFlexGrid-Control über eine AutoEdit-Funktion.

Viel Spaß damit!
 

Dieser Tipp wurde bereits 1.080 mal aufgerufen.

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2021 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel