Ich bin noch nicht wirklich sehr weit mit C#, und hab ein Zeichenprogramm geschrieben. Es ist noch nicht fertig, und es gibt endlich viele Verbesserungsstellen und Fehler.
Das Zeichnen hat bis vor kurzem funktioniert, aber dann hab ich die Funktionen "Speichern" und Öffnen hinzugefügt, und jetzt klappts nimmer Bei jedem beliebigen Grafik.*-Befehl kommt "Object reference not set to an instance of an object." Wäre euch sehr verbunden wenn ihr mal drüberschauen könntet
LG Freddy
DOWNLOAD
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Zeichnenprogramm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
#region startup
Graphics grafik;
Bitmap pic;
Pen stift = new Pen(Color.Black, 1);
SolidBrush pinsl = new SolidBrush(Color.Black);
DialogResult savemsg;
OpenFileDialog öffnen = new OpenFileDialog();
SaveFileDialog speichern = new SaveFileDialog();
int startX, startY, endeX, endeY;
//int[] VX = new int[n-1];
int werkzeug = 1;
int stiftdicke = 1;
int farbe = 0;
bool full;
bool saved = false;
Color[] farben = { Color.Black, Color.White, Color.Red, Color.Yellow, Color.Green, Color.Blue, Color.Purple, Color.Orange };
private void Form1_Load(object sender, EventArgs e)
{
pic = new Bitmap(pictureBox1.Image);
grafik = Graphics.FromImage(pic);
}
#endregion
Bist du es schon mal mit dem Debugger durchgegangen und gesehen an welcher Stelle das Objekt auf welches du zugreifen möchtest, nicht instanziert ist (bzw. null)?
Sonst kannst du ja mal dein Projekt zum runterladen posten.
Hey,
Danke für deine Antwort!
Ja, und ich glaube das die grafik null ist, weil beim Form_Load-Event das pictureBox1.Image eingelesen wird, was auch Null ist zu diesem Zeitpunkt. Aber das ist doch normal und soll auch so, oder?
Habe das Programm jetzt mal oben an den Thread zum DL hingemacht.
LG
private void Form1_Load(object sender, EventArgs e)
{
if (pictureBox1.Image != null)
{
pic = new Bitmap(pictureBox1.Image);
Graphics grafik = Graphics.FromImage(pic);
}
}
Sonst würde ich dir noch empfehlen kein Englisch/Deutsch zu mischen, verwende englische Begriffe für Variablen/Methoden usw.
Ich habe dein Programm nicht komplett getestet, sondern nur gestartet und beim Start hatte ich bereits an dieser Stelle eine nullpointerexception
Hey,
Danke nochmal. Was soll diese If-Abfrage denn bringen? Ich muss die pictureBox ja als Graphic verwenden, damit ich nachher öffnen&speichern kann. Also muss er das immer machen beim starten. Aber naja, ich denke mal du willst damit erstmal nur den Fehler umgehen, oder? Klappt bei mir aber nicht.. selber Fehler
Habe mal versucht den Wert der pictureBox zu ändern, sodass er nicht mehr null ist, indem ich just ein Bild von meiner HD eingebunden hab(hat geklappt, denn er geht dann in die If-Abfrage^^). Hat aber nix gebracht, stürtzt immer noch bei jedem grafik.* befehl ab, selbe Meldung.
Wenn ich bei Zeile42 nach "pic = new Bitmap(pictureBox1.Image);" nen Breakpoint setze, sagt er mir, das pic den Wert "{System.Drawing.Btimap}" hat, aber da steht nix von der pictureBox.Image die ich vorher da reingemacht hat. Außerdem wird der Wert in roter Schrift angezeigt. Ist das normal, oder müsste beim Wert nicht noch mehr stehn`?
Einen Schritt weiter wird die "Graphics Grafik" zu "{System.Drawing.Graphic}", und beim "}", wo er aus If rausgeht kriegt Grafik wieder den Wert 0?? Da kann doch was nciht stimmen, wahrscheinlich lese ich das pictureBox.Image nicht richtig in "pic" ein.
Ich habe jetzt versucht ein Bild mittels deines Tools zu öffnen, und natürlich wieder eine nullpointerexception, die erste war beim Starten deine Programms, da du in der Form1_Load Methode (also beim Starten deiner Anwendung) ein nichts! in pic speichern wolltest -> klar erste nullpointer, dann habe ich ein Bild öffnen wollen (da ich keine tiffs aufm Rechner sofort parat hatte, so habe ich in deiner öffnenToolStripMenuItem_Click Methode den Filter auskommentiert, sowohl als auch die Aufrufe grafik.save() und grafik.dispose()
Übrigens die von mir fix eingebaute Abfrage in der Form1_Load Methode Methode ist nicht unsinnig, zumindest nicht wenn der Code so aussieht wie du es programmiert hast, was erwartest du denn wenn du nichts in deine Box reinladen willst? Du solltest wirklich einige Aufrufe überprüfen, wo etwas vllt. gespeichert/geladen werden soll was noch nicht exisitert.