Laden...

Datagrid view - Kontext Menü

Erstellt von LastGentleman vor 17 Jahren Letzter Beitrag vor 17 Jahren 7.184 Views
LastGentleman Themenstarter:in
1.274 Beiträge seit 2005
vor 17 Jahren
Datagrid view - Kontext Menü

Hallo zusammen,

ich möchte gerne in ein DataGridView ein Kontext Menü einfügen, das geht auch soweit nur wie stelle ich fest wo er steht.

Gibt es da einen Eigenschaft in GridView. Wenn ich aber irgendwo mit der rechte Maustaste hinklicke dann ändert er nicht den "Gird-Coursor".

"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein

P
4 Beiträge seit 2006
vor 17 Jahren

Ich habe das gleiche Problem ... und mich interessiert die Antwort auch !

N
4.644 Beiträge seit 2004
vor 17 Jahren
private void dataGridView_MouseUp(object sender, MouseEventArgs e)
{
    DataGridView.HitTestInfo hti = dataGridView.HitTest(e.X, e.Y);
    if (hti.Type == DataGridViewHitTestType.Cell)
        dataGridView[hti.ColumnIndex, hti.RowIndex].Style.BackColor = Color.Red;
}
P
4 Beiträge seit 2006
vor 17 Jahren

Hmm ich meinte eher ein Kontext Menü zu öffnen, wenn man mit dem rechtsklick auf eine Zelle klikt.

Ich Bin jetzt soweit:

Private void myDataGridView_CellContentClick(object sender, DataGridViewMouseEventArgs e)
{
    if(e.Button == MouseButtons.Right)
    {
          MessageBox.show("RechtsKlick !");
    }

}

Jetzt will ich an der MessageBox stelle ein KontextMenü öffnen, das relativ zum inhalt der zelle ist.
Ich habe zB ein DatagridView, und in der ersten Spalte sind Dateien gelistet. Wenn ich jetzt ein Rechtsklick auf eine datei-zelle mache, will ich ein Kontext menü mit "Eigenschaften" haben (zB)

Bin ich da auf den richtigen Weg ?
Danke !

N
4.644 Beiträge seit 2004
vor 17 Jahren

Das DataGridView hat die Eigenschaft ContextMenuStrip. Der Rest geht über HitTestInfo.

P
4 Beiträge seit 2006
vor 17 Jahren

Hm ich bringe das nicht zum laufen 🙁

Brauche ich dennoch den dataGridView_CellContentClick benutzen ?

Ich will nur ein Kontextmenü erscheinen lassen, wenn ich ein rechtsklik in irgend eine Zelle der ersten Spalte mache. Und in dem Menü ist ein "Einstellung" button, der mir, wenn angeklikt, zB den Inhalt der geklikten Zelle anzeigt.

F
2 Beiträge seit 2006
vor 17 Jahren

Also wenn ich das jetzt richtig verstehe, willst du ein Kontextmenü öffnen, wenn du auf eine bestimmte Zelle rechts klickst und bestimmte Funktionen aufrufen willst, die die INfos der Zelle benötigen.

Dafür solltest du das DataGridView.CellContextMenuStripNeeded-Ereignis benutzen. Und zwar in der Column in der du die jeweiligen Kontextmenü anzeigen willst, wenn du auf eine Zelle rechts klickst.

In dem Event kannst du dann dein ContextMenu aufrufen samt der jeweiligen Zelleninhalte die du für z.B. "Eigenschaften" brauchst

hier der link zur MSDN Ereignis CellContextMenuStripNeeded

P
4 Beiträge seit 2006
vor 17 Jahren

Hallo,

Danke für den Tipp, ich habe inzwischen das Problem so gelöst:
"fenetre" ist mein DataGridView,

// Rechtsklick Menü Definition
        private ToolStripMenuItem toolStripItem1 = new ToolStripMenuItem();

        // Rechtsklick Menü Adden
        private void AddContextMenu()
        {
            toolStripItem1.Click += new EventHandler(toolStripItem1_Click);
            ContextMenuStrip strip = new ContextMenuStrip();
            strip.Opening += new CancelEventHandler(OuvrirStrip);
            fenetre.Columns[0].ContextMenuStrip = strip;
            fenetre.Columns[0].ContextMenuStrip.Items.Add(toolStripItem1);
        }

        // Rechtsklick Menü öffnen
        void OuvrirStrip(object sender, CancelEventArgs e)
        {
            int IndexLigne = fenetre.CurrentCellAddress.Y;
            object SringCellule = fenetre.Rows[IndexLigne].Cells[0].Value as string;
            fenetre.Columns[0].ContextMenuStrip.Items[0].Text = "Einstellungen";
        }

        // Rechtsklick Menü Klick
        private void toolStripItem1_Click(object sender, EventArgs args)
        {
            bool isOk = true;
            foreach (DataGridViewCell myCell in fenetre.SelectedCells)
            {
                if (myCell.ColumnIndex != 0)
                    isOk = false;
            }
            if (isOk)
            {
                DataGridViewSelectedCellCollection selection = fenetre.SelectedCells;
                einstellungsForm einstellungen = new einstellungsForm(selection, this);
                einstellungen.Show();
            }
            else
            {
                MessageBox.Show("Ungültige Auswahl !", "Warnung");
            }
        }

        // KontextMenu beim Load adden
        private void mainForm_Load(object sender, EventArgs e)
        {
            AddContextMenu();
        }
LastGentleman Themenstarter:in
1.274 Beiträge seit 2005
vor 17 Jahren

Ich hab eine einfache Idotensicher Lösung gefunden


DataGridViewCellEventArgs CurrentCell ;

private void dataGridView1_CellMouseEnter(object sender, DataGridViewCellEventArgs e)
        {
            m_CurrentCell = e;
        }

 private void rückrufenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show((string)dataGridView1.Rows[m_CurrentCell.RowIndex].Cells[0].Value);
        }


"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein