Autor |
Beitrag |
derjonny
Hält's aus hier
Beiträge: 15
|
Verfasst: Mo 12.04.10 13:31
Hallo ihr lieben, da ich noch völliger anfänger bin in sachen programmieren habe ich doch schon die erste frage. Was hat dies zu bedeuten?
Ich wollte anfangen zu zeichnen mit C# .
Fehler 1 "System.EventArgs" enthält keine Definition für "Graphics", und es konnte keine Erweiterungsmethode "Graphics" gefunden werden, die ein erstes Argument vom Typ "System.EventArgs" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Users\Jonny\Documents\Visual Studio 2008\Projects\WindowsFormsApplication2\WindowsFormsApplication2\Form1.cs 31 28 WindowsFormsApplication2
Um euch mal aufzuklähren was dies zu bedeuten hat. Ich bin in der ausbildung als Informatikkaufmann und nun müssen wir eine Projektarbeit anfertigen. Dazu soll ein kleines Programm geschrieben werden. Für diese sache bräuchte ich jetzt eure hilfe..
MFG Jonny
Huch habe den Quelltext vergessen.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Windows.Forms; using System.Windows.Forms.Design; using System.IO; using System.Drawing.Printing; using System.Drawing.Imaging;
namespace WindowsFormsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { Close(); }
private void btnAnzeige_Click(object sender, EventArgs e) { Graphics g = e.Graphics; g.DrawString("Hello C#", new Font("Verdana", 20), new SolidBrush(Color.Tomato), 40, 40); g.DrawRectangle(new Pen(Color.Pink, 3), 20, 20, 150, 100); } } } |
Moderiert von Kha: C#-Tags hinzugefügt
|
|
JüTho
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Mo 12.04.10 17:05
Hallo und
Bitte mache deinen Beitrag lesbar: Öffne ihn mit dem Schere-Button, markiere den Teil, der Code sein soll, öffne "Bereiche", wähle in der ComboBox C# aus, drücke den Plus-Button, füge (soweit nötig) Einrückungen ein, benutze die "Vorschau", erst zum Schluss "Absenden". Meinst du nicht, dass man jetzt schneller versteht, worum es geht?
Allgemein: Eine solche Fehlermeldung kann mehrere Ursachen haben:
1. Du benutzt eine Klasse, die der Compiler nicht kennt. Dann muss über den Projekt-Explorer eine Referenz hinzugefügt werden.
2. Wenn die Referenz vorhanden ist: Du benutzt nur den Kurznamen der Klasse. Dann muss der Namespace angegeben werden: entweder beim Klassennamen oder (einfacher) per using-Direktive.
3. Wenn beides gegeben ist: Du verwendest eine Eigenschaft oder Methode, die die betreffende Klasse nicht kennt. Dann brauchst du eine passende andere Klasse.
Zu deinem Problem: Gezeichnet werden kann/soll nur in einem Ereignis, das dafür vorgesehen ist, nämlich Paint, aber nicht in einem beliebigen Button-Click. Dann stehen nämlich PaintEventArgs (statt einfacher EventArgs) zur Verfügung, und dazu passt dein Code-Versuch.
So ist das mit Code-Schnipseln: Sie dürfen nicht einfach kopiert und irgendwo eingefügt werden, sondern man muss wissen, was man wofür verwendet.
Gruß Jürgen
|
|
LordBen
Hält's aus hier
Beiträge: 8
Windoof XP
Visual C# 2008 Express, XNA GameStudios 3.1, BlitzBasic 3D
|
Verfasst: Mo 12.04.10 17:09
ich bin zwar auch relativ neu, aber ich glaube zu wissen woran es liegt
du musst erst noch die graphic erst noch bekannt geben (sorry kenne mich nicht so sehr mit den fachbegriffen aus)
das müsste dann wie folgt lauten:
C#-Quelltext 1:
| Graphics name = this.creategraphics(); |
ich hoffe das stimmt und ich konnte helfen
Edit: ach ja bei name solltest du irgendeinen namen eingeben, wie deine graphic heißen soll...
|
|
Kha
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mo 12.04.10 17:32
CreateGraphics ist in den seltensten Fällen nützlich, da der Inhalt beim nächsten Repaint wieder weg ist. Der Weg über die EventArgs von Paint ist schon der richtige.
_________________ >λ=
|
|
derjonny
Hält's aus hier
Beiträge: 15
|
Verfasst: Di 13.04.10 10:21
ich danke euch schonmal für diese netten antworten.
Das hat mir schonmal sehr geholfen.
Die frage ist ja jetzt wie sieht der code aus wenn ich sage.
"Klicke auf den Button und das gemalte bild soll in der PictureBox erscheinen."??
|
|
norman2306
Beiträge: 222
Erhaltene Danke: 16
Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
|
Verfasst: Di 13.04.10 10:53
Du solltest dir darüber Gedanken machen... es versuchen, und wenn es nicht funktioniert, dann hier deinen Code posten und fragen warum es so nicht geht. Die meisten hier werden dir keinen fertigen Code liefern. Eine andere Möglichkeit ist, nach einer Vorgehensweise zu fragen. Aber auch hier wirst du in den seltensten Fällen direkt Code bekommen. Wir helfen gerne, aber wir erledigen nicht deine Hausaufgaben.
Also, beschreib dein Problem genau und sag uns, an welcher Stelle du nicht weiter kommst. Dann bekommst du ruck zuck einen tollen Tip.
Wenn du nur ein Bild in eine Picturebox haben möchtest, mussst du es nicht mit Graphics zeichnen. Du könntest auch einfach dem BackgoundPicture der PicBox ein Bild zuweisen.
Oder du schreibst in Paint-Ereignis der PicBox, dass wenn ein bestimmter bool gesetzt ist, du ein Bild malst. Im Button setzt du den entsprechenden bool und löst ein Repaint aus.
|
|
derjonny
Hält's aus hier
Beiträge: 15
|
Verfasst: Do 15.04.10 10:32
Supi ich danke euch habe alles hinbekommen
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| private void button1_Click(object sender, EventArgs e) { if (chBSchaltkreisAnz.Checked == true) { Graphics g = picBSchaltung.CreateGraphics(); Pen pen = new Pen(Color.Black); g.DrawLine(pen, 20, 15, 150, 15); g.DrawLine(pen, 20, 60, 20, 15); g.DrawLine(pen, 20, 105, 20, 135); g.DrawLine(pen, 20, 135, 330, 135); g.DrawLine(pen, 180, 15, 330, 15); g.DrawLine(pen, 330, 15, 330, 50); g.DrawLine(pen, 330, 105, 330, 135); g.DrawString("A", new Font("Arial", 20), Brushes.Blue, 152, 0); g.DrawEllipse(pen, 150, 0, 30, 30); g.DrawRectangle(pen, 0, 60, 30, 45); g.DrawString("G",new Font("Arial", 20), Brushes.Red, 0, 58); g.DrawLine(pen, 5, 85, 25, 85); g.FillEllipse(Brushes.Black, 270, 12, 6, 6); g.FillEllipse(Brushes.Black, 270, 132, 6, 6); g.DrawLine(pen, 273, 18, 273, 57); g.DrawLine(pen, 273, 87, 273, 132); g.DrawEllipse(pen, 258, 57, 30, 30); g.DrawString("V", new Font("Arial", 20), Brushes.Blue, 260, 57); g.DrawRectangle(pen, 320, 50, 20, 55); g.DrawString("R", new Font("Arial", 12), Brushes.Black, 321, 67); } |
|
|
JüTho
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Do 15.04.10 13:38
Ich glaube nicht, dass das die Lösung ist. Führe dieses Verfahren einmal aus. Danach hole irgendein anderes Fenster einer anderen Anwendung in den Vordergrund und setze es über dein Fenster; dann minimiere die andere Anwendung. Was passiert dann mit deiner Zeichnung?
Ich habe noch niemals gezeichnet, deshalb bin ich weniger als ein Anfänger. Aber nach allem, was ich bisher gelesen habe, dürfte dein Vorgehen falsch sein, weil du nicht das Paint-Ereignis benutzt; siehe oben auch Kha's Antwort.
Jürgen
|
|
danielf
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Do 15.04.10 13:43
Ja, Jürgen und Kha haben natürlich recht.
Wenn du nicht die Paint Methode verwenden willst, kannst du auch auf ein Image zeichnen und dieses der PictureBox zuweisen. Ist vlt. sinnvoller, weil man dann nur einmal mehr oder weniger aufwendig das Bild zeichnen... wobei mir gerade auffällt, dass ich gar nicht weiß wie im Hintergrund ein Bild zur Laufzeit abgelegt wird.. irgendwie muss es ja auch wieder gezeichnet werden.. hmm Hilfe??? Dennoch denke ich einmal Bild zeichnen und der PictureBox zuweisen ist Performance sparender.
|
|
Kha
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Do 15.04.10 16:17
danielf hat folgendes geschrieben : | wobei mir gerade auffällt, dass ich gar nicht weiß wie im Hintergrund ein Bild zur Laufzeit abgelegt wird.. irgendwie muss es ja auch wieder gezeichnet werden.. hmm |
Deine Verwunderung spiegelt sich in der Tatsache wider, dass Image abstract ist *g* .
Es gibt eigentlich nur zwei Möglichkeiten: Man speichert wie Metafile nur die Abfolge der Operationen, dann hätten wir im Vergleich zu einem reinen Paint-Handler nichts gewonnen. Oder man speichert wirklich ein Array aller Pixel, wie es der Name Bitmap nahe legt. Speicher spart das natürlich nicht gerade, aber Zeit im Allgemeinen schon .
_________________ >λ=
|
|
|