Rahmen einer Zelle einfärben VB.NET

Hier werden Fragen zur Programmierung des ppsGrids...

Rahmen einer Zelle einfärben VB.NET

Beitragvon BeS am 30.09.2012, 19:40

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
BeS
 
Beiträge: 7
Registriert: 28.09.2012, 17:44

Re: Rahmen einer Zelle einfärben VB.NET

Beitragvon torsten am 01.10.2012, 10:04

Hallo Bertram
In der C#-Hilfe ist das Verbindungszeichen PIPE '|' vorhanden.
Da meckert VB.Net. Gibt es hier etwas entsprechendes für VB ?

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")
Code: Alles auswählen
cell = Grid1.Cells(3, 5)
cell.CellBorderSide = ppsGrid.eCellBorderSide.Left OR ppsGrid.eCellBorderSide.Right
cell.CellFrameColor = Color.Red


Gibt es eine Möglichkeit, den Zellenrahmen zu lassen wie er ist, und nur die Linke Linie rot einzufärben?

Innerhalb einer Zelle mehrfarbige Rahmen geht nicht.
Was du machen kannst, ist der Zelle und der Zeile einen Rahmen zuordnen:
Code: Alles auswählen
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


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
torsten
Site Admin
 
Beiträge: 92
Registriert: 02.05.2006, 09:04
Wohnort: Bremen

Re: Rahmen einer Zelle einfärben VB.NET

Beitragvon BeS am 01.10.2012, 21:40

Hallo Torsten

Erstmal Danke für die schnelle Anwort


torsten hat geschrieben: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")


Das 'OR' funktioniert.

> 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
BeS
 
Beiträge: 7
Registriert: 28.09.2012, 17:44

Re: Rahmen einer Zelle einfärben VB.NET

Beitragvon torsten am 04.10.2012, 08:41

Hallo Bertram
Was du machen kannst, ist der Zelle und der Zeile einen Rahmen
Mhhh, also alles ziemlicher Quatsch, was ich da oben geschrieben habe... :-(
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: Alles auswählen
  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

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:
  • cell.CellBorderSide
  • grid/col/row/cell.CellFrameColor
  • grid/col/row/cell.CellFrameDashStyle
  • grid.CellFrameType
  • grid.CellFrameWidth
Theoretisch könnte ich alle Eigenschaften rausschmeissen. Nur ist das Grid
danach nicht mehr kompatibel zum Vorgänger: Nicht schön...
Tipps? Vorschläge?
Gruß Torsten
torsten
Site Admin
 
Beiträge: 92
Registriert: 02.05.2006, 09:04
Wohnort: Bremen

Re: Rahmen einer Zelle einfärben VB.NET

Beitragvon BeS am 04.10.2012, 13:17

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
BeS
 
Beiträge: 7
Registriert: 28.09.2012, 17:44

Re: Rahmen einer Zelle einfärben VB.NET

Beitragvon torsten am 04.10.2012, 17:40

Hallo Bertram
Ich hab' heute mal ein bißchen "experimentiert" :-)
Code: Alles auswählen
   // 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);


Das ganze sieht dann ungefähr so aus:
Bild

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
torsten
Site Admin
 
Beiträge: 92
Registriert: 02.05.2006, 09:04
Wohnort: Bremen

Re: Rahmen einer Zelle einfärben VB.NET

Beitragvon BeS am 05.10.2012, 18:53

Hallo Torsten
Funktioniert alles. Perfekte Arbeit :D


Ü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
BeS
 
Beiträge: 7
Registriert: 28.09.2012, 17:44


Zurück zu Fragen zur Programmierung

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron