onko tietoa että onko mahdollista luoda tommonen exel-tyyppinen taulukko? OLE-objekti ei kelpaa. Löysin jonkun FlexGrid 6.0 controllin mutta siinä solujen arvot on suljettua eli tietääkö kukaan jotain taulukkoa jossa solujen arvoja pystyisi muuttamaan myös ohjelman ollessa käynnissä? Löytyiskö flexgridiin jotain kohtaa millä solut vois avata?Kiitos etukäteen
MsflexGridin solujen arvoja voi muuttaa esim.
MSFlexGrid1.TextMatrix(1, 2) = "oma arvo".
TextMatrix:ssa viitataan ensin riviin(1) ja sitten sarakkeeseen(2). Sekä rivit että sarakkeet alkavat nollasta.
Nollarivi/sarake näkyy harmaana ja sen arvoa voi muuttaa samalla tavalla.
Tiesin tuon. Mutta solun arvoa pitäis pystyä muuttamaan sitten kun ohjelma on käynnissä. Nyt ne on suljettu.
Voisi kokeilla keypress eventtiä siihen gridiin:
Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer) MSFlexGrid1.Text = MSFlexGrid1.Text & Chr(KeyAscii) End Sub
Periaatteessa pitäis toimia ja tästä voi kehitellä eteenpäin.
Joo mut oon näitä alottelijoita.
Pystytkö suomentamaan tuon lauseen niin et mäkin ymmarran sen?
Event(KeyPress) reagoi näppäimen painamiseen. Ohjelman pätkä
ottaa sisään tulevana muuttujana painetun näppäimen ascii koodin.
MSFlexGrid1.Text = MSFlexGrid1.Text & Chr(KeyAscii)
Tässä rivissä solussa olevaan tekstiin lisätään (&) ascii koodin mukainen merkki (Chr(KeyAscii)).
Tämä on ainut koodin pätkä joka tarvii itse lisätä.
Tuota koodinpätkää kannattaa vielä täydentää ainakin BackSpace-näppäimen tuella:
Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case vbKeyBack If Len(MSFlexGrid1.Text) > 0 Then MSFlexGrid1.Text = Left(MSFlexGrid1.Text, Len(MSFlexGrid1.Text) - 1) End If Case Else MSFlexGrid1.Text = MSFlexGrid1.Text & Chr(KeyAscii) End Select End Sub
Olen kyllä jokseenkin varma, että solusta voi tehdä muokattavan jotenkin suoraan. En vain löydä sellaista ominaisuutta millään.
Sitä mieltä minäkin mutta kun kukaan ei tunnu tietävän:(
Tuo backspace tuki on ilman muuta hyvä lisä.
Jos joku löytää keinon muokata solua suoraan niin olen kyllä kiinnostunut...
Toi backspace-lisä kun heitin sen sinne suoraan niin rupes toimimaan suurinpiirtein niin kun oli tarkoitus. Kiitos.
Kokeilkaa. Muuten miten mä saan tallennettua ne solujen arvot jokski tiedostoksi ja sit ladattua ne???
Löysin sattumalta koneeltani joskus väsäämäni systeemin jossa tekstin muokkaaminen toimii hieman samalla tavalla Excelissä. Kesken se vielä on, mutta kokeilen tässä väsätä sitä ja jos siitä ei valmista tule eikä muuta keinoa tuohon ole niin lähetän sen koodit sitten keskeneräisenä.
Tiedostoon tallennuksen voi tehdä vaikka command nappiin:
Private Sub Command1_Click() Dim solutxt, rivitxt As String Open "c:\testi.txt" For Output As #1 For x = 0 To Flex.Rows - 1 rivitxt = "" For y = 0 To Flex.Cols - 1 rivitxt = rivitxt & Flex.TextMatrix(x, y) & ";" Next y Write #1, rivitxt Next x Close #1 End Sub
Tässä esimerkissä MSFlexGrid1 on korvattu Flex:llä.
Tiedosto testi.txt pitää luoda ensin vaikka notepadilla.
Tämä esimerkki ei sitä tee mutta osaa käyttää olemassa olevaa failia.
Tiedostosta luetaan takaisin taulukkoon esim.
Private Sub Command2_Click() Dim solutxt, rivitxt As String Dim rivino, ppos As Integer rivino = 0 Open "c:\testi.txt" For Input As #1 Do While Not EOF(1) Input #1, rivitxt For x = 0 To Flex.Cols - 1 ppos = InStr(rivitxt, ";") solutxt = Left(rivitxt, ppos - 1) Flex.TextMatrix(rivino, x) = solutxt rivitxt = Right(rivitxt, Len(rivitxt) - ppos) Next x rivino = rivino + 1 Loop Close #1 End Sub
Toivottavasti tämä nyt pelittää jos testaat.
Toimii loistavasti. Tästä on hyvä jatkaa eteenpäin.
Jos tulee jotain kehitys ideoita niin oon kyllä kiinnostunut.
Aihe on jo aika vanha, joten et voi enää vastata siihen.