Autor Beitrag
RalphHoffmann
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Di 08.09.15 14:27 
Hallo und guten Tag @ all :D

Ich erstelle mit folgendem Code ein Formular, dem ich ein paar Eigenschaften mitgebe. Zuletzt will ich zeichnen und dann das Formular modal anzeigen lassen. Es erscheint jedoch kein gefülltes Rechteck? Warum? Ich lasse die Ausführung des Codes (da gehört noch mehr dazu) in dieser Methode stoppen und gehe in Einzelschritten weiter. Dort sehe ich dann, dass die Zeichenfläche besorgt wird und auch, dass der 'musterPinsel' definiert ist.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
private void infoToolStripMenuItem_Click(object sender, EventArgs e)
{
//Eine Instanz des Infoforms anlegen
Form frmInfo = new Form();

//Formular Einstellungen anpassen
frmInfo.FormBorderStyle = FormBorderStyle.Fixed3D;
frmInfo.MaximizeBox = false;
frmInfo.MinimizeBox = false;
frmInfo.Text = "Stil - Info";

//Zeichenfläche besorgen
Graphics zfInfo;
zfInfo = frmInfo.CreateGraphics();

//Rechteck mit aktueller Füllung/aktuellem Muster zeichnen            
zfInfo.FillRectangle(musterPinsel,10,10,10,10);

//Formular anzeigen
frmInfo.ShowDialog();

...
}


Gruß
Ralph

Moderiert von user profile iconTh69: Code- durch C#-Tags ersetzt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 08.09.15 14:40 
Die Oberfläche wird regelmäßig neu gezeichnet mit dem was das Control definiert und/oder das was du im OnPaint Ereignis hinzufügst.
ShowDialog löst ein erstes zeichnen aus und in diesem Zeichnen ist dein FillRectangle nicht enthalten da es nicht in OnPaint stattfindet.

Zeichnen auf ein Control ist keine einmalige dauerhafte Sache. Die Fläche eines Controls mußt du jedesmal zeichnen/neuzeichnen wenn diese Fläche ungültig wird (warum das auch immer passiert ist). Einmal irgendwas auf die Fläche zeichnen und hoffen das das bei jeder Änderung verwahrt wird funktioniert nicht. Du mußt das zeichnen vom OnPaint Ereignis aus erledigen. Wenn das aus irgendeinem Grund zu lange dauert weil sehr komplex oder so dann kannst du das was du da zeichnest zuerst in irgendein Bitmap zeichnen und dann in OnPaint in das Graphics Object kopieren (per DrawImage z.B.).
RalphHoffmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Di 08.09.15 17:17 
Hallo Ralf,

danke für Deine Hilfe. Ich habe parallel auch weiter gegoogelt und inzwischen gleiche Infos gefunden :!: :D

Werde ich mich jetzt mal mit diesem OnPaint auseinander setzen.

Gruß
Ralph
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4805
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 08.09.15 17:30 
Hallo,

s.a. den Link unter Grafiken: was mache ich falsch?