Discussion:
Makierte Zelle NICHT hervorheben
(zu alt für eine Antwort)
Sebastian Noack
2005-02-27 00:46:29 UTC
Permalink
Hi,

ich habe ein schreibgeschütztes DataGrid, wo der Anwender eine Zeile
auswählen soll. Habe jetzt im CurrentCellChanged-Event gemacht dass die
Zeile der aktuellen Zelle ausgewählt wird. Kann man vielleicht noch
irgendwie unterbinden das die Zelle die angeklickt wird so hässlich grau
hinterlegt wird?
--
Best Regards
Sebastian Noack
Frank Dzaebel
2005-02-27 07:57:14 UTC
Permalink
Hallo Sebastian,
Post by Sebastian Noack
ich habe ein schreibgeschütztes DataGrid, wo der Anwender eine Zeile
auswählen soll. Habe jetzt im CurrentCellChanged-Event gemacht dass die
Zeile der aktuellen Zelle ausgewählt wird. Kann man vielleicht noch
irgendwie unterbinden das die Zelle die angeklickt wird so hässlich grau
hinterlegt wird?
Schätze mal, Du benutzt dataGrid1.Select(dataGrid1.CurrentRowIndex);
im CurrentCellChanged-Event.
Dann wäre das Verhalten so definiert und folgerichtig.
Du könntest in erster Näherung mal folgendes machen :
dataGrid1.SelectionBackColor = SystemColors.Control;
dataGrid1.SelectionForeColor = Color.Black;

Wenn Dir das nicht gefällt, müsstest Du schon etwas wie folgendes benutzen :

[How can I specially color only the currentcell of my readonly datagrid?]
http://64.78.52.104/FAQ/WinForms/FAQ_c44c.asp#q900q

[How do I color a individual cell depending upon its value or some external
method?]
http://64.78.52.104/FAQ/WinForms/FAQ_c44c.asp#q745q

ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP C#]
http://www.FranksSeite.de
Sebastian Noack
2005-02-27 11:59:53 UTC
Permalink
Post by Frank Dzaebel
dataGrid1.SelectionBackColor = SystemColors.Control;
dataGrid1.SelectionForeColor = Color.Black;
Das bringts leider nicht, hab ich schon ausprobiert.
Post by Frank Dzaebel
[How can I specially color only the currentcell of my readonly datagrid?]
http://64.78.52.104/FAQ/WinForms/FAQ_c44c.asp#q900q
[How do I color a individual cell depending upon its value or some external
method?]
http://64.78.52.104/FAQ/WinForms/FAQ_c44c.asp#q745q
Danke, aber schade das es keinen einfacheren Weg gibt.
--
Best Regards
Sebastian Noack
Frank Dzaebel
2005-02-27 12:48:15 UTC
Permalink
Hallo Sebastian,
... hab ich schon ausprobiert.
genau meinen Vorschlag, wirklich ?
Aber die selektierte Zelle sieht dann IMHO deutlich "angenehmer" aus.
Andererseits bewegt man sich im Niemandsland.
Denn nach Definition muss der Hintergrund eigentlich grau sein,
denn die Zelle ist ReadOnly. Ein "standard visual hint", der sonst fehlen
würde.
Aber trotzdem verstehe ich Dein Ansinnen.
Danke, aber schade das es keinen einfacheren Weg gibt.
Ja, schade, aber der vorgeschlagener Weg :
http://64.78.52.104/FAQ/WinForms/FAQ_c44c.asp#q900q
bedeutet ja nur einen einmaligen Aufwand und ist kopierbar.
Und später kann man die überschriebenen ColumnStyles
ja noch für andere Zwecke weiter optimieren.

ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP C#]
http://www.FranksSeite.de
Sebastian Noack
2005-02-27 14:30:27 UTC
Permalink
Post by Frank Dzaebel
... hab ich schon ausprobiert.
genau meinen Vorschlag, wirklich ?
Du hast vorgesclhagen die aktuelle Zeile grau (bzw. in der selben Farbe
wie die markierte Zelle) zu highlighten, sehe ich grade. Ne, das hab ich
nicht ausprobiert, da die makierte Zeile ja blau sein soll. :/
Post by Frank Dzaebel
Denn nach Definition muss der Hintergrund eigentlich grau sein
Muss nach Defnition eine markierte Zelle nicht eigentlich blau sein?
Post by Frank Dzaebel
http://64.78.52.104/FAQ/WinForms/FAQ_c44c.asp#q900q bedeutet ja nur
einen einmaligen Aufwand und ist kopierbar. Und später kann man die
überschriebenen ColumnStyles ja noch für andere Zwecke weiter
optimieren.
Ich werde es mir mal überlegen, aber wie müsste ich das denn dann
machen, wenn ich die DataGridTableCell abgeleitet und die
Paint-Methode überschrieben habe und dann möchte das mein DataGrid
meine abgeleitete DataGridTableCell, anstatt der standartmässigen
DataGridTableCell verwenden soll?
--
Best Regards
Sebastian Noack
Frank Dzaebel
2005-02-27 15:55:55 UTC
Permalink
Hallo Sebastian,
Post by Sebastian Noack
Muss nach Defnition eine markierte Zelle nicht eigentlich blau sein?
Es sollte die SystemColors.Highlight Farbe benutzt werden.
Die kann über
Systemsteuerung/Anzeige/Darstellung/erweitert/MarkierteElemente geändert
werden, ist dann aber System/User-global. Das ist schon Standard.
Post by Sebastian Noack
Ich werde es mir mal überlegen, aber wie müsste ich das denn dann
machen, wenn ich die DataGridTableCell abgeleitet und die
Paint-Methode überschrieben habe und dann möchte das mein DataGrid
meine abgeleitete DataGridTableCell, anstatt der standardmässigen
DataGridTableCell verwenden soll?
DataGridTableCell ? was ist das.
Du kannst nur das abgeleitete *DataGridTextBoxColumn* meinen.
Hattest Du das C#-Beispiel von diesem Link einmal ausprobiert ?
http://64.78.52.104/FAQ/WinForms/FAQ_c44c.asp#q900q
Im Projekt ist das ja funktionsfähig vorhanden.

ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP C#]
http://www.FranksSeite.de
Sebastian Noack
2005-02-27 17:08:05 UTC
Permalink
Post by Frank Dzaebel
Post by Sebastian Noack
Muss nach Defnition eine markierte Zelle nicht eigentlich blau sein?
Es sollte die SystemColors.Highlight Farbe benutzt werden.
Die kann über
Systemsteuerung/Anzeige/Darstellung/erweitert/MarkierteElemente geändert
werden, ist dann aber System/User-global. Das ist schon Standard.
Das meinte ich ja, aber der einfachheitshalber hab ich einfach "blau"
gesagt da dies meistens der SystemColor.Highlight entspricht.
Post by Frank Dzaebel
DataGridTableCell ? was ist das.
Du kannst nur das abgeleitete *DataGridTextBoxColumn* meinen.
Ja, die meine ich, sorry.
Post by Frank Dzaebel
Hattest Du das C#-Beispiel von diesem Link einmal ausprobiert ?
http://64.78.52.104/FAQ/WinForms/FAQ_c44c.asp#q900q
Im Projekt ist das ja funktionsfähig vorhanden.
Habe es nur mal kurz durchgelesen. Außerdem bin ich nicht so fit in
VB.net.
--
Best Regards
Sebastian Noack
Frank Dzaebel
2005-02-27 17:19:47 UTC
Permalink
Hallo SebastianŽ,
Post by Sebastian Noack
Post by Frank Dzaebel
Hattest Du das C#-Beispiel von diesem Link einmal ausprobiert ?
http://64.78.52.104/FAQ/WinForms/FAQ_c44c.asp#q900q
Im Projekt ist das ja funktionsfähig vorhanden.
Habe es nur mal kurz durchgelesen.
Außerdem bin ich nicht so fit in VB.net.
Das ist da auch in C# drin ! "...... You can also download samples(C#, VB).
......"

ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP C#]
http://www.FranksSeite.de
Sebastian Noack
2005-02-27 17:11:25 UTC
Permalink
Hi,

ich habe grade eine geniale und dennoch einfache Lösung für mein Problem
gefunden.

Ich setze this.datagrid.Enabled = false und mache dann im MouseDown-Event
des Forms folgendes:

private void FrmDatagrid_MouseDown(object sender, MouseEventArgs e)
{
// Bilschirmposition der Klickposition ermitteln.
Point screenPoint = this.PointToScreen(new Point(e.X, e.Y));
// Angeklickte Position innerhalb des DataGrids ermitteln.
Point clientPoint = this.dataGrid.PointToClient(screenPoint);
// Index der angeklickten Zeile ermitteln.
int clickedRow = this.dataGrid.HitTest(clientPoint).Row;
// Wenn eine Zeile im DataGrid angeklickt wurde, alle anderen
// Zeilen deselektieren und die angeklickte Zeile auswählen.
if (clickedRow > -1)
{
for (int i = 0; ((DataTable) this.dataGrid.DataSource).Rows.Count > i; i++)
{
this.dataGrid.UnSelect(i);
}
this.dataGrid.Select(clickedRow);
this.dataGrid.CurrentRowIndex = clickedRow;
}
}
--
Best Regards
Sebastian Noack
Frank Dzaebel
2005-02-27 18:03:33 UTC
Permalink
Hallo Sebastian,
Post by Sebastian Noack
Ich setze this.datagrid.Enabled = false und mache dann im MouseDown-Event
Wenn Du "datagrid.Enabled = false" setzt, werden überhaupt
keine Mouse-Events mehr vom DataGrid akzeptiert.

Schied für mich von vornherein aus, da man dann nicht mehr über die
ColumnHeader sortieren kann und auch die Breite der Columns nicht
anpassen kann, nicht fokussieren kann, nicht mit dem Cursor die
Zeilen wechseln kann, kein ContextMenu bekommt etc. pp.
Das gäbe sicher viele Probleme beim Kunden.
Aber evtl. ist es ja trotzdem ausreichend für Dich.
Dann hat es ja noch ein erfolgreiches Ende heute :)

ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP C#]
http://www.FranksSeite.de
Sebastian Noack
2005-02-27 18:16:46 UTC
Permalink
Post by Frank Dzaebel
Hallo Sebastian,
Post by Sebastian Noack
Ich setze this.datagrid.Enabled = false und mache dann im MouseDown-Event
Wenn Du "datagrid.Enabled = false" setzt, werden überhaupt
keine Mouse-Events mehr vom DataGrid akzeptiert.
Schied für mich von vornherein aus, da man dann nicht mehr über die
ColumnHeader sortieren kann und auch die Breite der Columns nicht
anpassen kann, nicht fokussieren kann, nicht mit dem Cursor die
Zeilen wechseln kann, kein ContextMenu bekommt etc. pp.
Oh, daran habe ich garnicht gedacht, aber ich kann ja während der
Cursor über dem Header ist, das Datagrid wieder aktivieren.

Aber im Moment macht mir das andere Problem (siehe "Problem bei Stack mit
DataTable-Objekten die in einem DataGrid angezeigt werden sollen.") mehr
sorgen. :(
--
Best Regards
Sebastian Noack
Loading...