Hallo Torsten
Möchte gleich eine weitere Frage stellen.
Ist es möglich, vom Zellenrahmen nur die linke Linie z.B. Rot einzufärben?
Meine Versuche mit CellBorderSide ergaben, dass, wenn die linke Linie in Rot angezeigt wird,
die anderen Linien der Zelle nicht gezeichnet werden.
Gibt es eine Möglichkeit, den Zellenrahmen zu lassen wie er ist, und nur die Linke Linie rot einzufärben?
Ich bräuchte das, um in meinen großen Tabellen einzelne Bereiche (Spalten) optisch voneinander zu trennen.
Kann man dies eventuell auch auf andere Weise lösen?
In der C#-Hilfe ist das Verbindungszeichen PIPE '|' vorhanden. Da meckert VB.Net. Gibt es hier etwas entsprechendes für VB ?
Anbei mein Codeausschnitt der funktioniert.
Linke Linie =rot, alle anderen Linien der Zelle werden jedoch nicht gezeichnet.
'CellBorderSide
'Dim cell As ppsGrid.GridCell
cell = Grid1.Cells(3, 5)
cell.CellBorderSide = ppsGrid.eCellBorderSide.Left '| ppsGrid.eCellBorderSide.Right
cell.CellFrameColor = Color.Red
Gruß Bertram
Rahmen einer Zelle einfärben VB.NET
Re: Rahmen einer Zelle einfärben VB.NET
Hallo Bertram
In VB.net ist es das "OR" (soweit ich weiß, gibt es bei VB.net keine
Unterscheidung zwischen bitweises und logischem "Oder")
Was du machen kannst, ist der Zelle und der Zeile einen Rahmen zuordnen:
Das Beispiel zeichnet eine Linie:
- in der gesamten Spalte 3 rechts
- in der gesamten Zeile 5 unten
- in der Zelle (3,5) rechts und unten
Farblich mischen oder andere Muster innerhalb einer Zelle geht aber nicht.
Gruß Torsten
Das "|" ist hier keine "Pipe" sondern der bninäre (bitweiser) Oder-Operator in C#.In der C#-Hilfe ist das Verbindungszeichen PIPE '|' vorhanden.
Da meckert VB.Net. Gibt es hier etwas entsprechendes für VB ?
In VB.net ist es das "OR" (soweit ich weiß, gibt es bei VB.net keine
Unterscheidung zwischen bitweises und logischem "Oder")
Code: Select all
cell = Grid1.Cells(3, 5)
cell.CellBorderSide = ppsGrid.eCellBorderSide.Left OR ppsGrid.eCellBorderSide.Right
cell.CellFrameColor = Color.Red
Innerhalb einer Zelle mehrfarbige Rahmen geht nicht.Gibt es eine Möglichkeit, den Zellenrahmen zu lassen wie er ist, und nur die Linke Linie rot einzufärben?
Was du machen kannst, ist der Zelle und der Zeile einen Rahmen zuordnen:
Code: Select all
row = Grid1.Rows(5)
row.CellBorderSide = ppsGrid.eCellBorderSide.Bottom
row.CellFrameColor = Color.Red
col = Grid1.Cols(3)
row.CellBorderSide = ppsGrid.eCellBorderSide.Right
row.CellFrameColor = Color.Red
cell = Grid1.Cells(3, 5)
cell.CellBorderSide = ppsGrid.eCellBorderSide.Right OR ppsGrid.eCellBorderSide.Bottom
cell.CellFrameColor = Color.Red
- in der gesamten Spalte 3 rechts
- in der gesamten Zeile 5 unten
- in der Zelle (3,5) rechts und unten
Farblich mischen oder andere Muster innerhalb einer Zelle geht aber nicht.
Gruß Torsten
Re: Rahmen einer Zelle einfärben VB.NET
Hallo Torsten
Erstmal Danke für die schnelle Anwort
> Innerhalb einer Zelle mehrfarbige Rahmen geht nicht.
> Was du machen kannst, ist der Zelle und der Zeile einen Rahmen zuordnen:
Habe das Ganze in einem neuen Projekt mit einem neuen Grid getestet
um Fehleinstellungen auszuschließen. Der Zellrahmen lässt sich wie du gesagt hast einstellen.
Aber einen 'Zeilen_Bottom' geht nicht.
Dim row As ppsGrid.GridRow
Dim col As ppsGrid.GridCol
Dim cell As ppsGrid.GridCell
' // Zeile einfärben
"row = Grid1.Rows(5)
"row.CellBorderSide = ppsGrid.eCellBorderSide.Bottom
"row.CellFrameColor = Color.Red
--> row.CellBorderSide = ppsGrid.eCellBorderSide.Bottom gibt eine Fehlermeldung:
'CellBorderSide' ist kein Member von ppsGrid.GridRow
Wenn man diese Zeile weglässt, wird in der Zeile der Cell-Rahmen
left, Bottom, right gezeichnet.
Vielleicht hast du noch eine Idee?
Gruß Bertram
Erstmal Danke für die schnelle Anwort
Das 'OR' funktioniert.torsten wrote:Das "|" ist hier keine "Pipe" sondern der bninäre (bitweiser) Oder-Operator in C#.
In VB.net ist es das "OR" (soweit ich weiß, gibt es bei VB.net keine
Unterscheidung zwischen bitweises und logischem "Oder")
> Innerhalb einer Zelle mehrfarbige Rahmen geht nicht.
> Was du machen kannst, ist der Zelle und der Zeile einen Rahmen zuordnen:
Habe das Ganze in einem neuen Projekt mit einem neuen Grid getestet
um Fehleinstellungen auszuschließen. Der Zellrahmen lässt sich wie du gesagt hast einstellen.
Aber einen 'Zeilen_Bottom' geht nicht.
Dim row As ppsGrid.GridRow
Dim col As ppsGrid.GridCol
Dim cell As ppsGrid.GridCell
' // Zeile einfärben
"row = Grid1.Rows(5)
"row.CellBorderSide = ppsGrid.eCellBorderSide.Bottom
"row.CellFrameColor = Color.Red
--> row.CellBorderSide = ppsGrid.eCellBorderSide.Bottom gibt eine Fehlermeldung:
'CellBorderSide' ist kein Member von ppsGrid.GridRow
Wenn man diese Zeile weglässt, wird in der Zeile der Cell-Rahmen
left, Bottom, right gezeichnet.
Vielleicht hast du noch eine Idee?
Gruß Bertram
Re: Rahmen einer Zelle einfärben VB.NET
Hallo Bertram
Eine Eigenschaft "CellBorderSide" für die Klasse GridRow gibs gar nicht.
(Nicht nur) deshalb kannst du nicht zwei (oder mehrere) CellBorderSide's in einer Zelle mischen.
Mehrere Ränder in unterschiedlichen Farben, Stärken und Stilen würden wohl nur mittels
Auflistung (Collection) von "CellBorderList" oä. funktionieren:
So in etwa ließen sich beliebig viele Rahmen in unterschiedlichen Ausprägungen
in einer Zelle kombinieren. Frage dabei ist nur: Wie verhalten sich die "alten" Eigenschaften:
danach nicht mehr kompatibel zum Vorgänger: Nicht schön...
Tipps? Vorschläge?
Gruß Torsten
Mhhh, also alles ziemlicher Quatsch, was ich da oben geschrieben habe...Was du machen kannst, ist der Zelle und der Zeile einen Rahmen
Eine Eigenschaft "CellBorderSide" für die Klasse GridRow gibs gar nicht.
(Nicht nur) deshalb kannst du nicht zwei (oder mehrere) CellBorderSide's in einer Zelle mischen.
Mehrere Ränder in unterschiedlichen Farben, Stärken und Stilen würden wohl nur mittels
Auflistung (Collection) von "CellBorderList" oä. funktionieren:
Code: Select all
cell.CellBorder.Add(new GridCellBorder(left, 4, red, solid)) // links: rot
cell.CellBorder.Add(new GridCellBorder(bottom, 1, blue, dash)) // unten: blau
cell.CellBorder.Add(new GridCellBorder(right, 2, yellow, dot)) // rechts: gelb
in einer Zelle kombinieren. Frage dabei ist nur: Wie verhalten sich die "alten" Eigenschaften:
- cell.CellBorderSide
- grid/col/row/cell.CellFrameColor
- grid/col/row/cell.CellFrameDashStyle
- grid.CellFrameType
- grid.CellFrameWidth
danach nicht mehr kompatibel zum Vorgänger: Nicht schön...
Tipps? Vorschläge?
Gruß Torsten
Re: Rahmen einer Zelle einfärben VB.NET
Hallo Torsten
cell.CellBorder.Add(new GridCellBorder(left, 4, red, solid)) // links: rot
cell.CellBorder.Add(new GridCellBorder(bottom, 1, blue, dash)) // unten: blau
cell.CellBorder.Add(new GridCellBorder(right, 2, yellow, dot)) // rechts: gelb
Das wäre schon super, wenn man das umsetzen könnte. Da fallen mir viele neue Möglichkeiten ein.
z.B. Zelle unterstreichen. Linien, vertikal und horizontal durchs Grid, verschieden stark und gefärbt.
Damit könnte man sich, neben dem Grid auch z.b. Formulare erstellen usw.
...
Könnte man die neue Funktion nicht parallel zur alten Eigenschaft anbieten, die sich aber gegenseitig ausschließen?
Also man kann entweder die alte oder die neue Funktion innerhalb eines Grids verwenden.
Damit bliebe die Kompatibilität zu alten Projekten erhalten.
Gruß Bertram
cell.CellBorder.Add(new GridCellBorder(left, 4, red, solid)) // links: rot
cell.CellBorder.Add(new GridCellBorder(bottom, 1, blue, dash)) // unten: blau
cell.CellBorder.Add(new GridCellBorder(right, 2, yellow, dot)) // rechts: gelb
Das wäre schon super, wenn man das umsetzen könnte. Da fallen mir viele neue Möglichkeiten ein.
z.B. Zelle unterstreichen. Linien, vertikal und horizontal durchs Grid, verschieden stark und gefärbt.
Damit könnte man sich, neben dem Grid auch z.b. Formulare erstellen usw.
...
Könnte man die neue Funktion nicht parallel zur alten Eigenschaft anbieten, die sich aber gegenseitig ausschließen?
Also man kann entweder die alte oder die neue Funktion innerhalb eines Grids verwenden.
Damit bliebe die Kompatibilität zu alten Projekten erhalten.
Gruß Bertram
Re: Rahmen einer Zelle einfärben VB.NET
Hallo Bertram
Ich hab' heute mal ein bißchen "experimentiert"
Das ganze sieht dann ungefähr so aus:
Ich würde sagen, du probiert es einfach mal aus...
Fehler/Infos/Rückmeldungen usw. bitte hierher
Download wie immer unter http://www.ppsGrid.de/download/ppsGrid_beta.dll
Gruß Torsten
Ich hab' heute mal ein bißchen "experimentiert"
Code: Select all
// array mit 4 GridCellBorder-Objekte
GridCellBorder[] brd_lst = new GridCellBorder[4];
brd_lst[0]=new GridCellBorder(eCellBorderSide.Bottom,Color.Red,2,eDashStyle.DashDotDot);
brd_lst[1]=new GridCellBorder(eCellBorderSide.Right,Color.Blue,4,eDashStyle.Dash);
brd_lst[2]=new GridCellBorder(eCellBorderSide.Top,Color.Silver,6,eDashStyle.Solid);
brd_lst[3]=new GridCellBorder(eCellBorderSide.Left,Color.Yellow,8,eDashStyle.Dot);
// die vier BorderObjekte an die Zelle übergeben
grid1[1,1].CellBorderList.AddRange(brd_lst);
// geht auch: Zeilen bekommt Rahmen
grid1.Rows[3].CellBorderList.AddRange(brd_lst);
// geht auch: Alle vier Rahmen der Zelle gleich
GridCellBorder brd = new GridCellBorder(eCellBorderSide.All,Color.Yellow,8,eDashStyle.Solid);
grid1[3,1].CellBorderList.Add(brd);
// Links/Rechts-Rahmen für Zelle
brd_lst = new GridCellBorder[2];
brd_lst[0]=new GridCellBorder(eCellBorderSide.Right,Color.Blue,4,eDashStyle.Solid);
brd_lst[1]=new GridCellBorder(eCellBorderSide.Left,Color.Red,4,eDashStyle.Solid);
grid1[5,1].CellBorderList.AddRange(brd_lst);
// Links/Rechts-Rahmen für Spalte
grid1.Cols[7].CellBorderList.AddRange(brd_lst);
Ich würde sagen, du probiert es einfach mal aus...
Fehler/Infos/Rückmeldungen usw. bitte hierher
Download wie immer unter http://www.ppsGrid.de/download/ppsGrid_beta.dll
Gruß Torsten
Re: Rahmen einer Zelle einfärben VB.NET
Hallo Torsten
Funktioniert alles. Perfekte Arbeit
Übersetzung in VB.NET
' // array mit 4 GridCellBorder-Objekte
Dim brd_lst(3) As ppsGrid.GridCellBorder
Grid1.AddCols(10)
Grid1.AddRows(10)
'GridCellBorder() brd_lst = new GridCellBorder(4);
brd_lst(0) = New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Bottom, Color.Red, 2, ppsGrid.eDashStyle.DashDotDot)
brd_lst(1) = New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Right, Color.Blue, 4, ppsGrid.eDashStyle.Dash)
brd_lst(2) = New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Top, Color.Black, 2, ppsGrid.eDashStyle.Solid)
brd_lst(3) = New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Left, Color.Yellow, 8, ppsGrid.eDashStyle.Dot)
'// die vier BorderObjekte an die Zelle übergeben
Grid1(1, 1).CellBorderList.AddRange(brd_lst)
'oder
Grid1.Cells(6, 6).CellBorderList.AddRange(brd_lst)
'Zelle unterstreichen
Grid1.Cells(0, 0).CellBorderList.Add(brd_lst(0)) '(AddRange(brd_lst))
'// geht auch: Zeile bekommt Rahmen
Grid1.Rows(3).CellBorderList.AddRange(brd_lst)
'Zeile bekommt Linie
Grid1.Rows(3).CellBorderList.Add(New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Bottom, Color.Black, 2, ppsGrid.eDashStyle.Solid))
'Spalte bekommt Linie
Grid1.Cols(3).CellBorderList.Add(New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Left, Color.Black, 2, ppsGrid.eDashStyle.Solid))
'// geht auch: Alle vier Rahmen der Zelle gleich
Grid1(3, 1).CellBorderList.Add(New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.All, Color.Yellow, 8, ppsGrid.eDashStyle.Solid))
'// Links/Rechts-Rahmen für Zelle
brd_lst(2) = New ppsGrid.GridCellBorder
brd_lst(0) = New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Right, Color.Blue, 4, ppsGrid.eDashStyle.Solid)
brd_lst(1) = New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Left, Color.Red, 4, ppsGrid.eDashStyle.Solid)
Grid1(5, 1).CellBorderList.AddRange(brd_lst)
'// Links/Rechts-Rahmen für Spalte
Grid1.Cols(7).CellBorderList.AddRange(brd_lst)
Danke und Gruß
Bertram
Funktioniert alles. Perfekte Arbeit
Übersetzung in VB.NET
' // array mit 4 GridCellBorder-Objekte
Dim brd_lst(3) As ppsGrid.GridCellBorder
Grid1.AddCols(10)
Grid1.AddRows(10)
'GridCellBorder() brd_lst = new GridCellBorder(4);
brd_lst(0) = New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Bottom, Color.Red, 2, ppsGrid.eDashStyle.DashDotDot)
brd_lst(1) = New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Right, Color.Blue, 4, ppsGrid.eDashStyle.Dash)
brd_lst(2) = New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Top, Color.Black, 2, ppsGrid.eDashStyle.Solid)
brd_lst(3) = New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Left, Color.Yellow, 8, ppsGrid.eDashStyle.Dot)
'// die vier BorderObjekte an die Zelle übergeben
Grid1(1, 1).CellBorderList.AddRange(brd_lst)
'oder
Grid1.Cells(6, 6).CellBorderList.AddRange(brd_lst)
'Zelle unterstreichen
Grid1.Cells(0, 0).CellBorderList.Add(brd_lst(0)) '(AddRange(brd_lst))
'// geht auch: Zeile bekommt Rahmen
Grid1.Rows(3).CellBorderList.AddRange(brd_lst)
'Zeile bekommt Linie
Grid1.Rows(3).CellBorderList.Add(New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Bottom, Color.Black, 2, ppsGrid.eDashStyle.Solid))
'Spalte bekommt Linie
Grid1.Cols(3).CellBorderList.Add(New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Left, Color.Black, 2, ppsGrid.eDashStyle.Solid))
'// geht auch: Alle vier Rahmen der Zelle gleich
Grid1(3, 1).CellBorderList.Add(New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.All, Color.Yellow, 8, ppsGrid.eDashStyle.Solid))
'// Links/Rechts-Rahmen für Zelle
brd_lst(2) = New ppsGrid.GridCellBorder
brd_lst(0) = New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Right, Color.Blue, 4, ppsGrid.eDashStyle.Solid)
brd_lst(1) = New ppsGrid.GridCellBorder(ppsGrid.eCellBorderSide.Left, Color.Red, 4, ppsGrid.eDashStyle.Solid)
Grid1(5, 1).CellBorderList.AddRange(brd_lst)
'// Links/Rechts-Rahmen für Spalte
Grid1.Cols(7).CellBorderList.AddRange(brd_lst)
Danke und Gruß
Bertram