Control in tableview einfügen

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

Control in tableview einfügen

Beitrag von kpmais » Mo 11. Mär 2019, 15:52

Hallo und gunntach ...

Ich habe folgendes problem:

Ich möchte ein control (hier combobox) in eine tableview zelle einfügen bzw. drüber legen.

Die Form besitzt ein Tableview namens tableview1
Ich habe folgenden code:
' -----------------------------------------------------------------------------------------------
'Gambas class file

Private myCombo As ComboBox

Public Sub form_Open ()
myCombo = New ComboBox (TableView1.Children [0])
Object.Attach (TableView1, Me, "tabEvents")

TableView1.Columns.Count = 2
TableView1.rows.Count = 15
TableView1.Columns [0] .Width = TableView1.W / 2 - 15
TableView1.Columns [1] .Width = TableView1.W / 2 - 15
End

Public Sub showCombo (tabIndex As Integer)
Dim Xstart, CorrY As Integer

myCombo.w = TableView1 [0, 1] .Width
myCombo.h = TableView1 [0, 1] .Height

myCombo.Y = TableView1 [tabIndex, 1] .Y
myCombo.X = TableView1 [tabIndex, 1] .x
End

Public Sub tabEvents_Click ()

show combo (Last.row)

End

' --------------------------------------------------------------------------------------------------------------------

Das control soll über die angeklickten zelle gelegt werden.
Das funktioniert auch gut.
Jetzt das Problem.
Wenn ich zu den unteren verdeckten zellen scrolle und diese anklicke schlägt die positionierung fehl. Das control wird dann wesentlich tiefer eingefügt als die position der angeklickten zelle ist.
Es scheint, dass die positionierung nur im ursprünglich sichtbaren zellbereich möglich ist.

Bin ich blöde, blockiert oder ist es ein bug?

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

Re: Control in tableview einfügen

Beitrag von kpmais » Di 12. Mär 2019, 09:43

Alles gut - ich hab's gelöst :D

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

Re: Control in tableview einfügen

Beitrag von Honsek » Di 12. Mär 2019, 09:53

Das freut mich sehr.

Hallo Peter,

uns würde die vollständige Lösung natürlich auch interessieren. Ein Quelltextschnipsel oder auch Etwas mehr sind immer hilfreich!

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

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

Re: Control in tableview einfügen

Beitrag von kpmais » Di 12. Mär 2019, 11:46

Sehr gerne.

Der Hintergrund scheint zu sein, dass das control immer nur im sichtbaren bereich positioniert werden kann.
Nimmt man den top wert (y wert) einer zelle auf zu der nach unten gescrollt werden muss, hat man jetzt einen wert größer der viewanzeige.
Es muss also um den gescrollten faktor in top richtung korrigiert werden.
Das wäre in meinem source in der routine showcombo die zeile:
myCombo.Y = TableView1 [tabIndex, 1] .Y
ändern in

myCombo.Y = TableView1 [tabIndex, 1] .Y - TableView1.ScrollY

Das wärs ... :-)

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

Re: Control in tableview einfügen

Beitrag von Honsek » Di 12. Mär 2019, 12:41

kpmais hat geschrieben:
Di 12. Mär 2019, 11:46
... Es muss also um den gescrollten faktor in top richtung korrigiert werden. Das wäre in meinem source in der routine showcombo die zeile:
myCombo.Y = TableView1 [tabIndex, 1] .Y ändern in myCombo.Y = TableView1 [tabIndex, 1] .Y - TableView1.ScrollY
Hallo Peter,

Dank für die Information. Nur finde ich in Deinen Angaben keinen Wert, der als Faktor aufgefasst werden kann.

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

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

Re: Control in tableview einfügen

Beitrag von kpmais » Di 12. Mär 2019, 14:16

Der korrekturfaktor ist tableview.scrolly, der abgezogen werden muss.

Ok, kein faktor im sinne einer multiplikation.
Evtl. unkorrekte wortwahl von mir.

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

Re: Control in tableview einfügen

Beitrag von gambasso » Di 12. Mär 2019, 19:12

moin,

@ kpmais:
wo holst Du 'tabIndex' her, bzw. wie errechnest Du den Wert?

Anmerkung - keine Mecker:

Du kannst den Gambas-Code mit Kopieren - Einfügen hier rüber ziehen, anschließend markieren und dann die [Gambas-Taste] über diesem
Eingabefeld drücken. Dann wird der Code für uns einfacher, übersichtlicher zu lesen.
Gruss

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

Re: Control in tableview einfügen

Beitrag von kpmais » Di 12. Mär 2019, 19:35

Ok, merke ich mir.
tabindex steht für den row index, der über last in der event routine mitgeteilt wird. War einfach nur eine bezeichnung.

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

Re: Control in tableview einfügen

Beitrag von gambasso » Mi 13. Mär 2019, 11:38

moin,
tabindex steht für den row index, der über last in der event routine mitgeteilt wird. War einfach nur eine bezeichnung.
im Gambas-Wiki finde ich kein Index. Wie setzt du diesen zusammen? Weil ich einiges mit TableView mache, interessiert mich das mal.
Gruss

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

Re: Control in tableview einfügen

Beitrag von kpmais » Mi 13. Mär 2019, 14:53

Ich denke, ich habe das hier nur unglücklich mit index in der sub bezeichnet.
Wenn du ein event mit nem tableview hast, bekommst du ja über Last die nummer der row und die nummer der column (Last.row bzw. Last.column) mitgeteilt.
Ich habe hier nur die row nummer in der sub gebraucht und habe der den namen tabindex in der übergabe gegeben.

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

Re: Control in tableview einfügen

Beitrag von gambasso » Mi 13. Mär 2019, 16:18

moin,

mit 'Last' hab ich es so noch nicht gemacht. Ich mache es etwa so:
gambas code
Public Sub TableView1_Click()
    Dim zei, spa As Integer
 
   zei = TableView1.Row
   spa = TableView1.Column
.........

End
Das kanst'e dann auswerten
Gruss

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

Re: Control in tableview einfügen

Beitrag von cogier » Mi 13. Mär 2019, 17:14

Es ist ein Editor in'TableView' integriert. Probieren Sie diesen Code in einem neuen Projekt aus.
gambas code
ComboBox1 As ComboBox
TableView1 As TableView

Public Sub Form_Open()

With Me
  .Padding = 5
  .Arrangement = Arrange.Vertical
End With

ComboBox1 = New ComboBox(Me)

With ComboBox1
  .Visible = False
  .List = ["", "One", "Two", "Three", "Four", "Five"]
End With

TableView1 = New TableView(Me) As "TableView1"

With TableView1
  .Expand = True
  .Columns.Count = 2
  .Rows.Count = 50
End With

Form_Resize

End

Public Sub TableView1_Click()

TableView1.EditWith(ComboBox1)
ComboBox1.Text = ComboBox1.List[1]

End

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

TableView1[Row, Column].Text = Value

End

Public Sub Form_Resize()

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

End

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

Re: Control in tableview einfügen

Beitrag von kpmais » Mi 13. Mär 2019, 22:40

wowww, danke :-).

das EditFeld kann quasi als Container genutzt werden.
Jetzt habe ich das ganze als eigene Klasse implementiert.

Super, danke nochmal ....

Antworten

Wer ist online?

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