2016-03-27 11 views
2

Ich versuche, ein klickbares Bild/Schaltfläche zu einer Datagridview Button-Spalte hinzufügen.DataGridView-Bild für Button-Spalte

Die Bild/Schaltfläche wird ein Symbol für Play oder Stop sein. Wenn der Benutzer auf die Wiedergabetaste klickt, wird ein Dienst auf dem System gestartet. Wenn der Benutzer auf die Schaltfläche zum Beenden klickt, wird ein Dienst beendet.

Ich habe bereits Funktionen zum Starten und Stoppen des Dienstes geschrieben. Was mir Schwierigkeiten bereitet, ist, dass der Button/das Bild im Datagrid angezeigt wird und klickbar wird.

Hier ist, was ich für Code haben:

this.dgrdServices.RowPrePaint +=new DataGridViewRowPrePaintEventHandler(dgv_RowPrePaint); 
this.dgrdServices.Rows.Add(); 
this.dgrdServices.Rows[0].Cells[0].Value = Image.FromFile(@"C:\users\brad\desktop\green-dot.gif"); 
this.dgrdServices.Rows[0].Cells[1].Value = "MyServer"; 
this.dgrdServices.Rows[0].Cells[2].Value = "MyService"; 
this.dgrdServices.Rows[0].Cells[3].Value = "Started"; 
this.dgrdServices.Rows[0].Cells[4].Value = new DataGridViewButtonCell(); 
this.dgrdServices.Rows[0].Cells[5].Value = "Uninstall"; 

ich nicht herausfinden können, ob es besser wäre, eine Taste zu verwenden, das ist ein Bild oder ein nur ein Bild, das anklickbare ist. Ich kann auch nicht einen Knopf bekommen, um richtig zu zeigen.

Dank Brad

+0

http://www.codeproject.com/KB/grid/DGV_ImageButtonCell.aspx – MethodMan

+0

Also, wenn du sagst, dass es nicht richtig auftaucht, kommt es überhaupt nicht auf? Zeigt es, aber etwas stimmt nicht mit dem Display? – Jace

+0

Ich habe verschiedene Codebeispiele aus Beispielen ausprobiert, die ich finden kann. Entweder habe ich einen unmarkierten grauen Knopf oder einen grauen Knopf, auf dem windows.system.bitmap steht. Ich kann auch nicht trainieren, wenn die Taste gedrückt wird, um meine Funktion anzurufen, die den Dienst startet/stoppt. – Brad

Antwort

5

Bild anzeigen On Button

Sie ein DataGridViewButtonColumn hinzufügen kann, dann CellPainting Ereignis des Rasters behandeln und prüfen, ob das Ereignis für die Button Spalte angehoben wird, dann ein Bild zeichnen darauf. Vergessen Sie nicht, am Ende der Veranstaltung e.Handled = true; zu setzen.

Im folgenden Code, den ich Ihnen ein Bild Ressource wie SomeImage angeblich haben:

private void grid_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) 
{ 
    if (e.RowIndex < 0) 
     return; 

    //I supposed your button column is at index 0 
    if (e.ColumnIndex == 0) 
    { 
     e.Paint(e.CellBounds, DataGridViewPaintParts.All); 

     var w = Properties.Resources.SomeImage.Width; 
     var h = Properties.Resources.SomeImage.Height; 
     var x = e.CellBounds.Left + (e.CellBounds.Width - w)/2; 
     var y = e.CellBounds.Top + (e.CellBounds.Height - h)/2; 

     e.Graphics.DrawImage(Properties.Resources.SomeImage, new Rectangle(x, y, w, h)); 
     e.Handled = true; 
    } 
} 

Bild anzeigen ohne Knopf

ein einzelnes Bild zu zeigen, auf alle Zeilen einschließlich der neuen Reihe, können Sie einstellen, die Image Eigenschaft von DataGridViewImageColumn. Auf diese Weise wird das Bild auf für alle Zeilen in dieser Spalte angezeigt werden:

dataGridView1.Columns.Add(new DataGridViewImageColumn(){ 
    Image = Properties.Resources.SomeImage, Name = "someName", HeaderText = "Some Text" 
}); 

Auch wenn Sie verschiedene Bilder für Zellen haben möchten, können Sie den formatierten Wert von DataGridViewImageColumn in CellFormatting Ereignisse ein:

void grid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    if (e.RowIndex < 0) 
     return; 

    //I supposed the image column is at index 1 
    if (e.ColumnIndex == 1) 
     e.Value = Properties.Resources.SomeImage; 
} 

Sie können auch Image Eigenschaft von DataGridViewImageColumn zu einem Bild festlegen, aber das Bild wird nicht in neuer Zeile angezeigt.

Griff Klicken Sie

So behandeln Sie auf das Bild/Schaltfläche klicken, können Sie behandeln CellClick oder CellContentClick Veranstaltung:

void grid_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    if (e.RowIndex < 0) 
     return; 

    //I suposed you want to handle the event for column at index 1 
    if (e.ColumnIndex == 1) 
     MessageBox.Show("Clicked!"); 
} 

Wenn Sie CellContentClick behandelt Sie genau auf das Bild klicken sollten, wenn Sie Bildspalte verwenden .

Screenshot

Hier ist das Ergebnis.Erste Spalte ist eine Knopfspalte ein Bild und zweiten Spalt ist eine normales Bild Spalte zeigt ein einzelnes Bild zeigen:

enter image description here

+0

Ich habe das funktioniert, aber ein paar Kommentare - jetzt sehe ich einen Knopf mit einem Bild darüber. Was ich wirklich sehen möchte, ist nur das Bild. Das Bild muss jedoch anklickbar sein. – Brad

+0

Es ist eine Knopfspalte, die ein Bild zeigt, das Sie gesucht haben * Ich versuche, ein klickbares Bild/Knopf zu einer Datagridview Knopfspalte hinzuzufügen. * –

+0

Wenn Sie nur ein Bild wollen, können Sie einfach eine 'DataGridViewImageColumn' verwenden . –

Verwandte Themen