Das MSFlexGrid

Hallo Leute
Ich hab wieder einmal ein Problem
Ich hab ein mein Projekt ein MSFlexGrid eingefügt.
Aber irgendwie tut sich gar nichts, wenn ich versuche irgend etwas einzugeben.

z.B.:
MSFlexGrid1.TextMatrix(1, 1) = „Hallo“

Bei dem Befehl tut sich gar nichts.
Außerdem möchte ich zur Laufzeit Zeilen hinzufügen, was ich mit folgendem Befehl machen wollte.

MSFlexGrid1.Rows = MSFlexGrid.Rows + 1

Auch hier passiert genau null.

Kann mir jemand sagen, was ich falsch mache bzw. wie es richtig geht.
Auf Google und im Archiv habe ich nichts brauchbares gefunden.

mfg Andreas

Hallo,

Ich hab wieder einmal ein Problem
Ich hab ein mein Projekt ein MSFlexGrid eingefügt.
Aber irgendwie tut sich gar nichts, wenn ich versuche irgend
etwas einzugeben.

z.B.:
MSFlexGrid1.TextMatrix(1, 1) = „Hallo“

Bei dem Befehl tut sich gar nichts.

Das ist aber richtig.

Außerdem möchte ich zur Laufzeit Zeilen hinzufügen, was ich
mit folgendem Befehl machen wollte.

MSFlexGrid1.Rows = MSFlexGrid.Rows + 1

Auch hier passiert genau null.

Auch das geht, kein Fehler.

Kann mir jemand sagen, was ich falsch mache bzw. wie es
richtig geht.

Setze mal einen Stoppunkt auf die Zeilen … ich nehme an, daß Dein Programmzeiger da nie hinkommt, die Zeilen nicht abgearbeitet werden.

Gruß, Rainer

Hallo Rainer
Danke für die schnelle Antwort.
Leider hat mir das nicht weiter geholfen, denn die Zeilen werden abgearbeitet. Trotzdem werden die Befehle nicht (richtig) ausgeführt.
Ich versteh die Welt nicht mehr.
mfg Andreas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Andreas,

das hier …

Private Sub Command1\_Click()
 MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1
 MSFlexGrid1.TextMatrix(1, 1) = "Hallo"
End Sub

hat gerade an ein Flexgrid eine Zeile angefügt und den Text ‚Hallo‘ in das Flexgrid eingetragen. An der Stelle sitzt der Fehler nicht, Du mußt ihn wo anders suchen. Wenn Du etwas mehr Code postest kann eventuell jemand dabei helfen.

Gruß, Rainer

Danke Rainer
Das hat jetzt funktioniert.
Ich hab zwar keine Ahnung wieso, aber es geht.

mfg Andreas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke Rainer
Das hat jetzt funktioniert.
Ich hab zwar keine Ahnung wieso, aber es geht.

mfg Andreas

Ich glaube ich weiß wo das Problem liegt. Könnte es sein, dass man solche Sachen nur in einem Private Sub verändern kann, denn vorher hatte ich ein Public Sub verwendet.

Hallo Andreas,

Ich glaube ich weiß wo das Problem liegt. Könnte es sein, dass
man solche Sachen nur in einem Private Sub verändern kann,
denn vorher hatte ich ein Public Sub verwendet.

??? ‚Public Sub‘ kannst Du doch nur in einem Modul schreiben.
Wenn Du den Code so in einem Modul hattest, dann war die Syntax falsch.

Du könntest ja zwei Formen haben und auf jeder Form ein ‚MsFlexgrid1‘. Welches ist dann gemeint, wenn Du im Modul nur ‚MsFlexgrdi1…‘ schreibst? Du mußt schon noch den Namen der Form davor schreiben …

Form1.MsFlexgrid1.Textmatrix(1,1) = „Hallo“

… wäre dann die richtige Syntax und funktioniert auch.

Gruß, Rainer

Hallo Leute

Ich hab jetzt alles so in meinem FlexGrid drin stehen wie ich will. Möchte es jetzt dem Benutzer ermöglichen die Daten einer Spalte zu verändern.
In der Hilfe hab ich gelesen, dass das möglich ict, wenn man das FlexGrid mit einer TextBox kombiniert. Leider gibt es keine Beispielprogramme und ich weiß nicht genau wie das geht.
Kann mir bitte jemand weiterhelfen.

Danke im Voraus
Mfg Andreas

Hi Leute, habe bereits eine Lösung für mein Problem gefunden, falls wer das selbe Problem hat, hier ist mein Lösungsvorschlag:
Bei einem Doppelklick auf eine bestimmte Zelle wird folgender Event ausgelöst

Private Sub MSFlexGrid1\_DblClick()
 Dim r, c As Integer
 c = MSFlexGrid1.ColSel
 r = MSFlexGrid1.RowSel
 MsgBox MSFlexGrid1.TextMatrix(r, c)
End Sub

Statt der MsgBox kann man dann den weiteren Code einfügen.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Andreas,

In der Hilfe hab ich gelesen, dass das möglich ict, wenn man
das FlexGrid mit einer TextBox kombiniert.

mit einer TextBox kombinieren klingt putzig. Gemeint ist, daß Du eine TextBox (erst mal unsichtbar) mit auf der Form platzierst. Wenn dann in das Flexgrid geklickt wird, wird die TextBox genau über der angeklickten Zelle platziert, sichtbar geschaltet und der Focus darauf gesetzt. Für den Anwender sieht das dann so aus, als könnte er in das Felxgrid etwas eingeben.
Wenn Du damit rechnen mußt, daß der Anwender erst mal klickt und dann eventuell scrollen will, Dir den Ablauf durcheinander bringt, dann mußt Du die Textbox auf eine eigene Form packen und die Modal öffnen.

In der Basisversion könnte das etwas so aussehen:

Private Sub Form\_Load()
 Text1.Visible = False
 Text1.Appearance = 0
 Text1.BorderStyle = 0
End Sub

Private Sub MSFlexGrid1\_Click()
 Text1.Left = MSFlexGrid1.CellLeft + MSFlexGrid1.Left
 Text1.Top = MSFlexGrid1.CellTop + MSFlexGrid1.Top
 Text1.Height = MSFlexGrid1.CellHeight
 Text1.Width = MSFlexGrid1.CellWidth
 Text1.Text = ""
 Text1.Visible = True
End Sub

Private Sub Text1\_Change()
 MSFlexGrid1.Text = Text1.Text
End Sub

Genügt das als Denkansatz?

Gruß, Rainer

Hallo,

Private Sub MSFlexGrid1_DblClick()
Dim r, c As Integer
c = MSFlexGrid1.ColSel
r = MSFlexGrid1.RowSel
MsgBox MSFlexGrid1.TextMatrix(r, c)
End Sub

warum so kompliziert? Durch den Klick in das Felxgrid werden die Eigenschaften .Row und .Col verändert. Um den Inhalt der Zelle zu lesen, brauchst Du .Textmatrix nicht, es genügt .Text, weil Row und Col ja richtig stehen.

Private Sub MSFlexGrid1\_Click()
 MsgBox MSFlexGrid1.Text
End Sub

Das liefert Dir das selbe Ergebnis.

Gruß, Rainer

Hallo Andreas,

eine Kleinigkeit ist mir noch aufgefallen …

Dim r, c As Integer

… Du dimensionierst damit nur c als Integer, r nicht!
In dem Fall bemerkst Du das nicht, weil der Code auch so funktioniert, in einem anderen Fall kann das zur Falle werden. Richtig ist:

Dim r As Integer, c As Integer

Gruß, Rainer

Hallo Rainer und Andreas.

Wenn Du damit rechnen mußt, daß der Anwender erst mal klickt
und dann eventuell scrollen will, Dir den Ablauf durcheinander
bringt, dann mußt Du die Textbox auf eine eigene Form packen
und die Modal öffnen.

Die Textbox braucht eigentlich nicht auf eine modale Form gepackt werden. Wenn der Anwender plötzlich anfängt zu scrollen, während eigentlich eine Eingabe in die TextBox erwartet wird, kann entsprechender Code im Scroll-Ereignis des FlexGrids die TextBox wieder auf Visible = False stellen. Eine noch bessere Möglichkeit ist, dafür das LostFocus-Ereignis der TextBox zu verwenden, da dieses dann ja nur einmal auftritt.

Viele Grüße
Carsten

Hallo Carsten,

Eine
noch bessere Möglichkeit ist, dafür das LostFocus-Ereignis der
TextBox zu verwenden, da dieses dann ja nur einmal auftritt.

ja, stimmt! Bei ‚LostFocus‘ einfach visible auf False und es sieht nicht ‚komisch‘ aus. In meinem Beispiel habe ich auch noch Setfocus vergessen … es war eben nur ein Denkansatz, kein fertiges Programm.

Gruß, Rainer