Autor Beitrag
yndaso
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 108



BeitragVerfasst: Mo 31.05.10 11:46 
Hallo zusammen,

ich habe ein Form mit mehreren Groupboxen und Labeln. Für den Ausdruck möchte ich
die Elemente ein bisschen formatieren (BackColor,...)

Da das aber nur für den Ausdruck seien soll, suche ich nun einen Weg wie man das am besten
macht, ohne das Aussehen des Forms auf dem Bildschirm zu beeinflussen.

Ich dachte mir daher, eine Kopie von der jeweiligen Groupbox zu erstellen und diese so
zu formatieren, dass es für den Ausdruck passt.

Allerdings google ich schon eine halbe Ewigkeit ohne einen Schritt weiterzukommen.
Die Beispiele die ich im www so gefunden habe, bringen mich nicht weiter.

Kann mir jemand sagen wie ich mein Problem am besten lösen kann?

Danke
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Mo 31.05.10 12:20 
Hallo,

ich nehme an du hast irgendwelche Daten, die du in der GroupBox darstellst. Wenn du das ganze als UserControl implementierst und die Daten dem Kontroll zuweist kannst du für deine Anpassung einfach ein neues UC erstellen, die Daten zuweisen und dieses dann formatieren und drucken.

Ich denke das ist der logische Weg. (Alle Controls einzeln zu kopieren etc. würde evtl. auch gehen aber ich nehmen an das braucht mehr Zeit wie ein UC einfügen und ist der deutlich unsaubere Weg).

Gruß
yndaso Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 108



BeitragVerfasst: Mo 31.05.10 12:31 
Sorry verstehe die Antwort nicht ganz.
Im prinzip ist es doch schon ein UserControl auf dem die GroupBoxen platziert sind.

Nochmal das gleiche Control zu erstellen ist recht übel, da das Control bereits sehr groß
ist.
Wenn dann müsste ich das alte Control komplett kopieren, womit ich eigentlich schon wieder
am gleichen Punkt bin.

Denn
ausblenden C#-Quelltext
1:
Control neuesControl = summaryControl (ist das eigentliche)					

geht leider nicht, da ja dabei ja nur die Referenz zugewiesen wird.

Ich dachte eher an eine Methode nach dem aussehen
ausblenden C#-Quelltext
1:
2:
3:
private Control CopyControl(Control ctrl)
{
}
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Mo 31.05.10 12:41 
Was meinst du mit
Zitat:
Nochmal das gleiche Control zu erstellen ist recht übel, da das Control bereits sehr groß
ist.
??

und was meinst du mit kopieren?

Ich stelle mir das so vor:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
//Daten beziehen
Result result = dataInterface.GetResult("...");

// Daten-Viewer (ResultUC) erstellen)
ResultUC resultUC = new ResultUC();

// Ergebnis dem Viewer hinzufügen
resultUC.Result = myResult;


Beim Drucken brauchst du dann:
ausblenden C#-Quelltext
1:
2:
PrintUC printUC = new PrintUC();
printUC.Result = resultUC.Result;


Die Klasse PrintUC leitet von ResultUC ab und nimmt ein paar spezifische Änderungen vor (wie die BackColor auf Weiß setzen).
yndaso Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 108



BeitragVerfasst: Mo 31.05.10 12:51 
Ja dein Vorschlag ließt sich sehr elegant.

Mein Problem ist glaube ich, dass ich keine DataInterface habe, sondern in
meinem Summary Control direkt mir die Daten auslese und dann auf Labels kopiere,
die in verschieden GroupBoxen aufgeteilt sind.

Mit sehr lange meine ich, dass da eine menge von Daten gesammelt und auf
labels kopiert werden.

Mit kopieren meine ich eigentlich "clonen". Sprich ein neues Objekt, dass
genauso ist wie das ursprüngliche nur ein bisschen aufbereitet.
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Mo 31.05.10 13:13 
Ja, das war schon ein Design-Fehler. Das Data-Interface ist "nicht so wichtig". Wichtig wäre aber ein Datenobjekt gewesen. Damit hättest du es sehr einfach realisieren können - das ist ein einfaches MVC-Konzept (wiki) das man immer machen sollte.

Wenn du es nicht anpassen willst bleibt dir wahrscheinlich nur die Clonse-Methode.

Die könnte wie folgt aussehen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
public GroupBox Clone(GroupBox originalGroupbox)
{
   GroupBox newGp = new GroupBox();

   // Alle Eigenschaften kopieren
   newGp.Top = originalGroupbox.Top;
   newGp.Left = ...
   ...

   // Alle unter controlos kopieren
   foreach(Control ctrl in originalGroupbox)
   {
       Control cloneCtrl = Clone(ctrl);
       newGp.Controls.Add(cloneCtrl);
   }

   return newGp;
}


Dies müsstest du halt für jede Art an UserControl machen. Die Lösung würde wohl auch "länger" gehen und ist immer noch sehr schlecht. Deshalb würde ich wie im vorherigen Post beschrieben voran gehen. Das Dauert dann vlt. einen halben Tag aber danach ist die Lösung sauberer.

Gruß
yndaso Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 108



BeitragVerfasst: Mo 31.05.10 13:53 
prinzipiell hab ich eine Klasse in der die meisten Daten schon drinnen stecken.

ich denke ich erspare mir ein paar Probleme wenn ich es doch umbaue.

Danke für deine Hilfe!