Wie zeichnen Sie einen Rahmen um eine DataGridView-Zelle während der Bearbeitung?

8

Ich möchte während der Bearbeitung einen roten Rahmen um eine DataGridView -Zelle zeichnen.

Ich habe es geschafft, einen roten Rahmen um die ausgewählte Zelle zu zeichnen, während sie nicht mit diesem Code bearbeitet wird:

%Vor%

Was bewirkt dieses Ergebnis:

Wenn Sie jedoch eine Zelle bearbeiten, geschieht dies:

Es scheint so, als ob sich die EditingControl über den größten Teil meiner roten Grenze zieht. Leider kann ich keine Möglichkeit finden, dies zu beheben, so dass mein roter Rahmen jederzeit vollständig angezeigt wird.

Wie kann ich das tun?


Folgendes habe ich bisher versucht:

1. Behandeln des Ereignisses EditingControlShowing() , um die Datei manuell neu zu zeichnen     Grenze wie folgt:

%Vor%

Aber das hat nichts gezeichnet. Ich habe ein paar Varianten ausprobiert, aber alle haben hier noch nichts gezeichnet.


2. Ich habe dann versucht, das Paint() -Ereignis von EditingControl zu behandeln.     so:

%Vor%

Aber dieses Ereignis feuert nicht einmal. Ich habe später irgendwo gelesen, dass die      EditingControl verwendet ein normales TextBox , das nicht aktiviert wird      Paint() -Ereignis, weil es stattdessen von Windows behandelt wird.


3. Schließlich, anstatt zu versuchen, eine andere Grenze neu zu malen, entschied ich mich dafür     Probieren Sie es aus und hacken Sie herum, indem Sie die EditingControl ändern     kleiner als meine Grenze in der Hoffnung würde die Grenze dann herum zeigen     Es ist so:

%Vor%

Aber das hat mir nur dieses Ergebnis gegeben:

Also ist die TextBox nach links gegangen, aber es scheint, dass es eine andere gibt     Kontrolle darunter, die immer noch meine rote Grenze blockiert. Ich kann jedoch nicht finden, um Zugang zu bekommen     zu dieser Kontrolle, um die Größe zu ändern, damit dies auch nicht für mich funktioniert.


4. Ich habe auch versucht, den Code aus # 1 oben zu verwenden, um den Rahmen im Ereignis Resize() erneut zu zeichnen, aber das hat immer noch nichts bewirkt. Obwohl die Verwendung von dataGridView1.EditingControl.BackColor = Color.Red; funktioniert hat, kann ich hier einige Teile des Steuerelements formatieren, aber es scheint, als ob der Versuch, einen Rahmen zu zeichnen, nicht einer davon ist.

Ich möchte nur einen roten Rahmen um die Zelle herum zeigen, während sie bearbeitet wird. Weißt du, wie ich das machen kann?

    
Calcolat 22.08.2015, 10:05
quelle

3 Antworten

6

Es kann mit einigen Einstellungen und Malen bestimmter Teile der Zelle getan werden. Um so zu:

Setzen Sie zuerst CellBorderStyle auf Raised oder Sunken im Designer oder einfach im Formular-Ladecode:

%Vor%

Zeichnen Sie dann Zellen mit diesen spezifischen geordneten Regeln:

  1. Zeichnen Sie nur Gitterinhaltszellen, nicht ColumnHeader-Zellen oder RowHeader
  2. Wenn Sie ausgewählte Zellen zeichnen, malen Sie zuerst alle Teile außer den Rahmen mit e.Paint (...); dann zeichne selbst Grenzen
  3. Setzen Sie e.Handled = true, um das Standardmalen zu verhindern
  4. Wenn Sie nicht ausgewählte Zellen zeichnen, malen Sie zuerst alle Teile außer den Rahmen mit e.Paint (...)
  5. Zeichnen Sie den oberen Rand der Zellen der ersten Zeile und den linken Rand der Zellen der ersten Spalte mit der Rasterhintergrundfarbe
  6. Zeichnen Sie den unteren Rand der Zellen der letzten Zeile und den rechten Rand der Zellen der letzten Spalte mit der Farbe der Gitterlinie
  7. Zeichnen Sie den unteren Rand der Zellen der nichtletzten Zeile und den rechten Rand der Zellen der nichtletzten Spalte mit der Rasterhintergrundfarbe
  8. Zeichnen Sie obere Randzellen der nicht-ersten Reihe und den linken Rand der Zellen der nichtletzten Spalte unter Verwendung der Gitterlinienfarbe 9.Stellen Sie e.Handled = true ein, um das Standardlackieren zu verhindern

Dies ist ein Screenshot des Ergebnisses, nachdem Sie

ausgewählt haben

und hier ist ein Screenshot des Ergebnisses beim Bearbeiten der Zelle

und hier ist der Code des Zellfarbenereignisses:

%Vor%     
Reza Aghaei 23.08.2015 18:48
quelle
2

Der einfachste Ansatz unter Verwendung Ihres vorhandenen Codes ist die Einstellung von CellBorderStyle auf Sunken wie folgt:

%Vor%

Wenn Sie Sunken nicht mögen, können Sie dies erreichen durch AdjustCellBorderStyle und DataGridViewAdvancedBorderStyle Ändern Sie im Zellfokusereignis den Zellrahmenstil. Sehen Sie sich auch Folgendes an: Gewusst wie: Anpassen von Zellen und Spalten in Windows Forms DataGridView Control durch Erweiterung ihres Verhaltens und Aussehens .

Ich hoffe, es würde dir helfen.

    
X-TECH 22.08.2015 10:48
quelle
0

Es scheint, als ob die EditingControl in einem Elternteil Panel gehostet wird, und wenn Sie den Opaque Stil dieser Gruppe auf true setzen, wird der Rahmen gezeichnet.

z. B.

%Vor%     
Loathing 24.08.2015 22:06
quelle

Tags und Links