2016-07-22 2 views
1

J'essaie d'utiliser un bouton pour charger le nom et le chemin du fichier dans la cellule DataGridView. Je placer le bouton sur une cellule comme ceci:Le bouton ne reçoit pas le clic de souris lorsqu'il est placé sur DataGridView

var cellRectangle = dataGridView.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false); 
int buttonX = dataGridView.Location.X + cellRectangle.Location.X + cellRectangle.Width - btnLoadFile.Width; 
int buttonY = dataGridView.Location.Y + cellRectangle.Location.Y; 

btnLoadFile.Location = new Point(buttonX + 20, buttonY); 
btnLoadFile.Height = cellRectangle.Height - 2; 
btnLoadFile.Visible = true; 
btnLoadFile.BringToFront(); 

Je voudrais à l'utilisateur de cliquer sur le bouton, choisissez le fichier dans FileDialog etc. Le problème est le bouton ne soit pas cliqué. La cellule de grille reçoit les clics à la place.

Est-ce que quelqu'un a une idée de pourquoi cela se passe et comment puis-je le gérer?

+0

faire le bouton en tant qu'enfant de vue de grille de données else réacheminer les boutons clic événement –

+0

@Uthistran: juste essayé. Le bouton ne répond toujours pas aux clics .... – DmitryRibak

+0

Cela semble incorrect. Vous ne l'avez probablement pas connecté correctement. Si vous pouvez voir et cliquer dessus, __will__ appellera son événement click. Que se passe-t-il lorsque vous double-cliquez sur le concepteur? – TaW

Répondre

0

Try this ...

dataGridView.Controls.SetChildIndex(btnLoadFile, 0); 
// Bring it to the front 
btnLoadFile.BringToFront(); 

Peut-être que vous n'avez pas besoin de la dernière ligne ...

+0

Malheureusement cela n'a rien changé ... Même comportement qu'avant – DmitryRibak

0

J'utiliser DataGridViewButtonColumn au lieu de dessiner un bouton au-dessus de la grille. Cela vous donne un bouton à l'intérieur de chaque rangée.

https://msdn.microsoft.com/de-de/library/system.windows.forms.datagridviewbuttoncolumn(v=vs.110).aspx

Si vous voulez avoir le bouton dans une autre cellule qui affiche par exemple des e-mails, vous pouvez déduire le type de editcell souhaité et mettre en œuvre une combinaison de TextBox et Button et rendre le bouton visible que lorsque dans editmode. Regardez ici https://msdn.microsoft.com/de-de/library/7tas5c80(v=vs.100).aspx pour plus d'informations. Je vous posterais du code, mais malheureusement, je n'ai fait que mes propres cellules/editcontrols à des fins différentes.

+0

Oui, je connais cette option mais juste lancer un bouton sur le formulaire et le placer sur une cellule m'a semblé beaucoup plus simple. Aussi je ne voudrais pas que toute la colonne soit remplie de boutons, ce n'est pas instructif pour l'utilisateur juste encombrer – DmitryRibak