... und wieder TableView

Alle Fragen zur Programmierung, die nicht in die speziellen Themen passen
Antworten
kpmais
Foriker
Beiträge: 16
Registriert: Mo 11. Mär 2019, 14:45
Kontaktdaten:

... und wieder TableView

Beitrag von kpmais » Sa 23. Mär 2019, 10:30

gambas code
Public Sub form_Open()

  TableView1.rows.Count = 5
  TableView1.columns.Count = 2
  TableView1[0, 1].Text = "hallo Welt"
End


Public Sub Button1_Click()
TableView1[0, 1].Text = "Hallo Welt"  
TableView1.Edit
TableView1[0, 1].Text = "Hallo Welt"
  'zweifache zuweisung dient lediglich der Überprüfung von value
  'im _save event

End

Public Sub TableView1_Click()
  
  TableView1.Edit
  
End

Public Sub TableView1_Save(Row As Integer, Column As Integer, Value As String)
  
  TableView1[row, Column].Text = Value
  
End

kpmais
Foriker
Beiträge: 16
Registriert: Mo 11. Mär 2019, 14:45
Kontaktdaten:

Re: ... und wieder TableView

Beitrag von kpmais » Sa 23. Mär 2019, 10:37

Jetzt hat der doch den Code abgeschickt ohne weiteren Kommentar von mir.
Also, hier gehts los. Oben nur der Code.

Folgendes Problem:
Die Zelle im View soll den Text aus dem Button Event erhalten.
Im Vorfeld wurde ihr schon ein Wert zugewiesen (form_open)

Der Wert "Hallo Welt" in der Zelle wird manuell gelöscht.
Jetzt wird der Button gedrückt.

Ohne die Anweisung "Tableview.edit" im button event wird gar nichts übernommen.

füge ich jetzt noch ein tableview event _save hinzu (braucht es ja öfter) wird in der value nur "" übergeben.
Und das egal, ob ich der Zelle vor oder nach dem edit (im button event) einen Wert zuweise.
Meinem Verständnis nach, sollte in der value der Wert stehen, der nun über die Texteigenschaft der Zelle mitgeteilt wird.

Ich habe wahrscheinlich das Tableview nicht wirklich verstanden.
Könnte mich jemand erleuchten?

kpmais
Foriker
Beiträge: 16
Registriert: Mo 11. Mär 2019, 14:45
Kontaktdaten:

Re: ... und wieder TableView

Beitrag von kpmais » Sa 23. Mär 2019, 11:42

Also, für Interessierte, ... ich habe eine Lösung gefunden.

im button_click event setzt man vor die anweisung:gambas code
 tableview1[row,column].text="blabla" 
die anweisung: gambas code
tableview1.cancel
das tableview1.edit wird dann nicht mehr benötigt. Der Wert kann der Zelle direkt zugewiesen werden.
Was die Cancel-Methode dabei bewirkt ist mir unklar.
Eigentlich ist mir die Cancel-Methode an sich hier unklar.
Frei assoziiert hätte ich ja gesagt, dass das Control (hier tableview) verlassen wird.
Aber wenn ich statt diesem Ereignis einfach mal den Fokus auf irgendein Control setze wird das tableview ja auch verlassen.
Aber dann tut sich nichts. Die tableview zelle bleibt leer. Keine Zuweisung möglich.

Die "Lösung" mit Cancel habe ich in einem älteren Workaround von Minisini gefunden. Da ging die clear Methode des tableview nicht, ein bug. Als Workaround sollte man vor clear die cancel methode verwenden.
Klappt hier auch. Nur verstehen tue ich es nicht. Auch ein Bug?

Ich brauche unbedingt die Erleuchtung von jemandem.

gambasso
Foriker
Beiträge: 995
Registriert: Sa 17. Mär 2012, 09:55
Kontaktdaten:

Re: ... und wieder TableView

Beitrag von gambasso » Sa 23. Mär 2019, 12:28

moin,

TV[Zeile,Spalte].Text = "lalala" braucht nichts danach oder davor. Kannst Du im Code jederzeit in die Zelle schreiben.

Ich mache das z.B. um Verzeichnisse einzulesen, ohne irgendwelche anderen Befehle.
Vorher richte ich die Tabelle natürlich ein, Header, Spaltenbreite ...
Vor jeder neuen Zeile dann ein 'Inc TableView.Rows.Count'
Nur wenn die Zeile oder Spalte nicht vorhanden ist, dann kommt ein Fehler, bei dem Du keine Werte anschließend mehr auslesen kannst.

Um eine Zelle editieren, dazu brauchst Du andere Befehle.
Gruss

Honsek
Foriker
Beiträge: 387
Registriert: Do 4. Okt 2007, 17:01
Kontaktdaten:

Re: ... und wieder TableView

Beitrag von Honsek » Sa 23. Mär 2019, 13:29

Hallo kpmais,

ein Blick in das Kapitel https://www.gambas-buch.de/doku.php?id=k17:k17.8:start könnte lohnend sein. Viel Erfolg.

Mit freundlichem Gruß
Honsek (https://www.gambas-buch.de)
---> Wenn Du eine gute Antwort erwartest, musst Du sehr gut fragen!

kpmais
Foriker
Beiträge: 16
Registriert: Mo 11. Mär 2019, 14:45
Kontaktdaten:

Re: ... und wieder TableView

Beitrag von kpmais » Sa 23. Mär 2019, 15:38

Tja, aber genau ist das Problem.
Weise ich der zelle einen wert zu (von irgendwo), lösche diesen manuell, also vorher edit, dann in die zelle mit dem cursor und durch entf, space oder sonstwie löschen und danach wieder einen wert zuweisen (über button oder sonstwie), wird nichts in der zelle dargestellt.
Das seltsame ist, die zelle besitzt den reingeschriebenen wert (debugger) aber er wird nicht dargestellt.
Die obige anforderung liest sich zugegebenermaßen etwas wirr. Aber man stelle sich ein beschreibbares view vor, in dessen zelle man einen wert z.b. einer listbox als auswahl nimmt. Man hat jedoch den falschen wert genommen, klickt in die zelle und entfernt ihn wieder um jetzt den korrekten wert aus der listbox einzufügen. Jetzt hat zwar view.text den wert drin, aber er wird nicht dargestellt. Und um ihn dennoch darzustellen brauche ich die cancel methode.
Ich versuchs mal noch mit gtk, vielleicht ist die darstellung dann korrekt.

kpmais
Foriker
Beiträge: 16
Registriert: Mo 11. Mär 2019, 14:45
Kontaktdaten:

Re: ... und wieder TableView

Beitrag von kpmais » Sa 23. Mär 2019, 16:33

hier ein vollständiges Beispiel.

wähle aus der listbox einen eintrag.
dieser wird in die erste zelle gesetzt
mit der maus in die zelle und den eintrag entfernen
dann wieder aus der listbox mit doppelklick wählen
das wird nicht mehr in der zelle gesehen (ist aber drinnen in der text eigenschaft !!!)
jetzt mal im quellcode den kommentar bei mytv.cancel (im listbox event) entfernen.
voilá - jetzt gehts.

sobald ein event des tablviews mit edit da ist (und das ist meist unvermeidlich) gehts leider nicht anders - denke ich mal.
aber ich lerne gerne dazu ....
gambas code
' ' Gambas class file

Private mytv As TableView
Private mylistbox As ListBox

Public Sub form_Open()

  mytv = New TableView(Me) As "mytv"
  mylistbox = New ListBox(Me) As "mylistbox"
  Me.w = 1000
  Me.h = 700
  With mytv
    .h = 400
    .w = 300
    .Rows.Count = 5
    .Columns.Count = 2
    .x = 100
    .y = 100
  End With
    
  With mylistbox
    .h = 200
    .w = 300
    .x = 450
    .y = 100
    .List = ["alle meine", "Entchen", "schwimmen auf", "dem See"]
  End With
  
End

Public Sub mylistbox_dblclick()
  
  ' mytv.Cancel
  mytv[0, 1].text = mylistbox.text
  
End

Public Sub mytv_click()
  
  mytv.Edit
  
End




gambasso
Foriker
Beiträge: 995
Registriert: Sa 17. Mär 2012, 09:55
Kontaktdaten:

Re: ... und wieder TableView

Beitrag von gambasso » Sa 23. Mär 2019, 17:18

moin,

hab mir das mal reinkopiert.
Wenn Du aktiv in dem TV in der Zelle[0, 1] bist, klappt es nicht. Wenn Du in der TV wonaders klickst, klappt es. Bei mir jedenfalls.

Was willst Du mir dem TV-Klick erreichen? Läst Du das weg, klappt es auch.
Willst Du die Zelle editieren? Dann mußt Du anders vorgehen.
Gruss

Benutzeravatar
cogier
Foriker
Beiträge: 32
Registriert: Do 19. Jul 2018, 16:18
Wohnort: Guernsey, Channel Islands
Kontaktdaten:

Re: ... und wieder TableView

Beitrag von cogier » Sa 23. Mär 2019, 17:33

Hilft das?
gambas code
ComboBox1 As ComboBox
mytv As TableView
 
Public Sub form_Open()

Me.padding = 5
Me.Arrangement = Arrange.Vertical

ComboBox1 = New ComboBox(Me)

With ComboBox1
  .Visible = False
  .List = ["alle meine", "Entchen", "schwimmen auf", "dem See"]
End With

mytv = New TableView(Me) As "mytv"

With mytv
  .Rows.Count = 5
  .Columns.Count = 2
  .expand = True
End With

End
 
Public Sub mytv_click()

mytv.EditWith(ComboBox1)

End

Public Sub mytv_Save(Row As Integer, Column As Integer, Value As String)

mytv[Row, Column].Text = Value

End

Public Sub Form_Resize()

mytv.Columns.Width = (mytv.W - (Me.padding * 2)) / 2

End
Bild

gambasso
Foriker
Beiträge: 995
Registriert: Sa 17. Mär 2012, 09:55
Kontaktdaten:

Re: ... und wieder TableView

Beitrag von gambasso » Sa 23. Mär 2019, 18:13

Oder kurz gesagt:

TableView editieren / Beispielname der Tabelle = TV_abc

Dieser Befehl muß dazu ausgeführt werden (z.B nach Button_Click)
> TV_abc.Edit <

Diese Sub wird gebraucht:
> Public Sub TV_abc_Save(zei As Integer, spa As Integer, inh As String) <

'zei', 'spa' und der Text aus 'inh' wird dabei übergeben.

> TV_abc[zei, spa].Text = inh < und hier in die Zelle eingefügt.

Anschließend:

> F0_TV21.MoveTo(zei, spa) < Cursor in die bearbeitete Zelle positionieren
Gruss

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste