DataGridView: Textteile aus Zellen markieren ermöglichen, Editieren aber verhindern

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Duke.

    DataGridView: Textteile aus Zellen markieren ermöglichen, Editieren aber verhindern

    Hi, ich stehe grade auf dem Schlauch.

    Ich möchte erlauben, einzelne Passagen aus Zellen (nicht den ganzen Zellinhalt)
    zu markieren (um es dann in die Zwischenablage zu kopieren). Editieren soll aber nicht
    erlaubt sein !

    Wie mache ich das am elegantesten ?
    @Duke So:

    VB.NET-Quellcode

    1. DGV.ReadOnly = True
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Duke Das ist nicht so trivial.
    Dann musst Du Dir de Zellinhalt bei .Enter merken und bei .Leave wieder einspielen.
    Mehrere Zellen zu selektieren sollte dann auch nicht möglich sein.
    Usw. :/
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    So, ich bin da grade mal wieder dran aber schon stellt sich gleich das nächste Problem dar:

    Wenn ich den Text selektiert habe und mit der rechten Maustaste darauf drücke,
    kommt statt meinem eigenen ein Standard-Kontextmenü (siehe Bild). Wie schaffe ich es, dass sich mein eigenes Kontextmenü
    öffnet (so, wie es auch schon klappt, wenn ich nicht im EditMode der Zelle bin und auf den selektierten Text klicke).

    Danke schon mal :)
    Bilder
    • ctxmenu.png

      6,19 kB, 252×291, 106 mal angesehen
    @Duke Hast Du dem DGV ein eigenes Kontextmenü zugewiesen (eins erstellen und im Designer dem DGV zuweisen)?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja, habe ich gemacht (siehe Bild, ist vom Typ ContextMenuStrip)

    Ich habe auch folgendes versucht, aber keine der drei Varianten hat einen Einfluß auf das gezeigte Kontextmenü:

    Quellcode

    1. private void DataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
    2. {
    3. DataGridView1.Rows[e.RowIndex].ContextMenuStrip = cmsLog;
    4. DataGridView1.Columns[e.ColumnIndex].ContextMenuStrip = cmsLog;
    5. DataGridView1[e.ColumnIndex, e.RowIndex].ContextMenuStrip = cmsLog;
    6. }



    Edit:

    Habs geschafft mit

    Quellcode

    1. private void DataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    2. {
    3. if (e.Control is DataGridViewTextBoxEditingControl)
    4. {
    5. var editingControl = (DataGridViewTextBoxEditingControl)e.Control;
    6. editingControl.ContextMenuStrip = cmsLog;
    7. }
    8. }


    Der Tip kam von hier
    Bilder
    • ctx2.png

      3,22 kB, 498×64, 103 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Duke“ ()