Private Sub MSHFlexGrid_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Dim lngRow As Long Dim lngCol As Long Dim lngColor As Long 'TÄMÄ TOIMII HALUTULLA TAVALLA If Button = vbLeftButton And Shift = vbCtrlMask Then With MSHFlexGrid .HighLight = 0 .Redraw = False lngRow = .MouseRow If lngRow >= .FixedRows Then .Col = .FixedCols If .CellBackColor = vbInfoBackground Then lngColor = .BackColor Else lngColor = vbInfoBackground End If For lngCol = .FixedCols To .Cols - 1 .Col = lngCol .CellBackColor = lngColor Next lngCol End If .Redraw = True End With End If End Sub ---------------------------------------------------------------------------------------------------------- Private Sub MSHFlexGrid_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyDown And Shift = vbShiftMask Then 'MITEN TAPAHTUU MONIVALINTA YKSITTÄIN ALASPÄIN LIIKKUESSA? End If If KeyCode = vbKeyUp And Shift = vbShiftMask Then 'MITEN TAPAHTUU MONIVALINNAN PERUUTTAMINEN YKSITTÄIN YLÖSPÄIN LIIKKUESSA? End If End Sub
----------------------------------------------------------------------------------------------------------
Entä mitenkä tehdään monivalinta alkaen ekasta klikatusta rivistä ja päättyen viimeiseen kikattuun riviin pitämällä Shift-näppäintä alhaalla ja klikkaamalla vikaa riviä? Eli samalla tavalla kuin Windowsin resurssienhallinnassa käsitellään tiedostoja.
Koodia ei välttämättä kannata liittää KeyDown-tapahtumaan. Yksi toteutus on panna muistiin rivi, jolla hiiren nappi painetaan pohjaan. Sitten kun nappi vapautetaan, tiedossa on merkittävän alueen alku- ja loppukohta. Tapahtumat ovat siis MouseDown ja MouseUp. Kirjoittamasi koodi kelpaa melkein sellaisenaan, sitä pitää muuttaa vain niin, että yhden rivin merkitsemisen asemesta merkitään kokonainen alue. Jos merkinnän pitää tulla näkyviin sitä mukaa kuin hiirtä liikutetaan, koodia pitää kirjoittaa vielä MouseMove-tapahtumaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.