Ik had een programma gebouwd, waar een oa datagrid onderdeel van was. Dat wil ik nu gaan uitbreiden met oa een contextmenu dat zich zou openen als er op bepaalde columnheaders van het datagrid zou worden (links enkel) geklikt.
Alleen krijg ik de locatie van de "DataGridViewColumnHeaderCell" niet fatsoenlijk uitgelezen, want ik krijg namelijk waarden die eerder overeen lijken te komen met de positie in column. Dus ik krijg bijvoorbeeld een locatie terug van (3, 10) pixels ipv de (300, 200) pixels die je zou verwachten, waardoor het contextmenu dus in de linkerboven hoek van mijn scherm wordt getekend.
Natuurlijk nog zitten googlen en het enige dat er een beetje dicht bij kwam was weer eens ExpertExchange waarvoor je moet betalen, voor de rest zijn het niet de meest handige zoektermen (datagrid, position, cell, location).
Ik heb dus onder andere de ContentBounds geprobeerd, en het ook met "gewone" cellen, just in case.
Ik zal even een stukje code plaatsen dat er dan nu staat.
Als iemand mee even in de betere richting kan trappen, of even de juiste aanpak zou kunnen vertellen, dan ehm
.
Alleen krijg ik de locatie van de "DataGridViewColumnHeaderCell" niet fatsoenlijk uitgelezen, want ik krijg namelijk waarden die eerder overeen lijken te komen met de positie in column. Dus ik krijg bijvoorbeeld een locatie terug van (3, 10) pixels ipv de (300, 200) pixels die je zou verwachten, waardoor het contextmenu dus in de linkerboven hoek van mijn scherm wordt getekend.
Natuurlijk nog zitten googlen en het enige dat er een beetje dicht bij kwam was weer eens ExpertExchange waarvoor je moet betalen, voor de rest zijn het niet de meest handige zoektermen (datagrid, position, cell, location).
Ik heb dus onder andere de ContentBounds geprobeerd, en het ook met "gewone" cellen, just in case.
Ik zal even een stukje code plaatsen dat er dan nu staat.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| private void dgvDataGrid_ColumnHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e) { string columnName = dgvDataGrid.Columns[e.ColumnIndex].Name; if (dgvDataGrid.Rows.Count > 0) { switch (columnName) { case "TrackYear": Point position = new Point(); position.X = dgvDataGrid.Columns[e.ColumnIndex].HeaderCell.ContentBounds.Left; position.Y = dgvDataGrid.Columns[e.ColumnIndex].HeaderCell.ContentBounds.Bottom; cmsYear.Show(position); break; //Hierondergaat het nog door |
Als iemand mee even in de betere richting kan trappen, of even de juiste aanpak zou kunnen vertellen, dan ehm
[ Voor 5% gewijzigd door Verwijderd op 07-03-2006 22:53 . Reden: Code even minder laten inspringen, voor uw leesgenot ]