Laden...
P
pmSyS myCSharp.de - Member
SW-Entwickler Dabei seit 21.02.2006 65 Beiträge
Benutzerbeschreibung

Forenbeiträge von pmSyS Ingesamt 65 Beiträge

19.06.2013 - 14:27 Uhr

"this.Visible=true" an der von dir genannten Stelle hat's gebracht...

Danke!

Grüße

18.06.2013 - 15:20 Uhr

Ok, danke erstmal.

Kann man die Form vom Gegenteil überzeugen?
Also, wie kann man da gegensteuern?

Das ist so sehr unschön...

Grüße
pmSyS

05.06.2013 - 11:20 Uhr

Ich habe jetzt gemerkt, dass wenn dieses Phänomen auftritt und ich das Hauptfenster minimiere und es über einen Doppelklick im Systray wieder vorhole, dieses Phänomen weg ist... ?!

8o ?(

WTF

05.06.2013 - 10:33 Uhr

Moin moin,

ich hab seit längerem wieder ein Problem, auf das mir Google keinen Lösungsansatz liefert...:

Ich habe ein Programm, dass seine Funktionalität über Plugins anbietet und im Systray minimiert werden kann.
Die Plugins werden dynamisch beim Start geladen.
Die geladenen Plugins werden mit ihrem Namen in ein Menü eingebunden, damit sie auswählbar werden.
Das Plugin gibt seinen Inhalt über ein UserControl preis; es wird beim Klick im Menü in ein Panel - im Hauptfenster der gesamten Anwendung - eingesetzt.

So weit, so gut -> funktioniert auch.

Nun war die Anforderung, dass, wenn das Prog minimiert ist und jemand es nochmal über die .exe starten will, die aktuelle Instanz nach Vorne geholt werden soll.
Das habe ich hiermit gelöst: C# Single Instance App With the Ability To Restore From System Tray (Using Mutex)

Jetzt das Phänomen:

  1. Nach erstmaligem Start und nach ein paar Klicks im Menü (z.B. drei Plugins wurden nacheinander im Panel angezeigt) wird das Fenster minimiert.
  2. Der Versuch das Programm nochmal zu starten führt dazu, dass die aktuelle Instanz nach vorne und aus dem Systray geholt wird.
  3. Jetzt klicke ich auf Menüpunkte, die ich vor dem Minimieren nicht angezeigt habe -> Das Panel bleibt leer. Die, die ich zuvor angeklickt habe, werden weiterhin gezeigt, wenn sie ausgewählt werden.

Wenn ich das Prog.-Fenster über einen Doppelklick im Systray wieder vorhole, gibt es dieses Phänomen nicht.

Ich hab mal die Stelle debuggt, aber es ist weder irgendwie etwas null oder anders, als bei denen, die angezeigt werden:


public void changeContent(IPlugin plg)
        {
            pContent.Controls.Clear();
            UserControl uc = plg.MainUserControl;
            uc.Width = pContent.Width;
            uc.Height = pContent.Height;
            uc.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
            uc.BackgroundImage = global::M_Web_Analyzer.GUI.Properties.Resources.MWeb_bg;
            pContent.Controls.Add(uc);
            //pContent.Refresh();
            core.ActivePlugin = plg;
            this.tiOptPlugin.Visible = true;
        }

Ich weiß grad nicht, warum die userControls nicht angezeigt werden, obwohl sie dem Panel hinzugefügt werden.

Ein "pContent.Refresh()" + Invalidate und Update habe ich schon versucht.

Ich hoffe, ihr könnt mir ein Paar Denkanstöße geben und dass ich mich bei der Problembeschreibung verständlich ausgedrückt habe.

Grüße

08.01.2009 - 10:46 Uhr

ok, danke erstmal.

Werd das mal ausprobieren.

08.01.2009 - 10:13 Uhr

Moin Leute,

erstmal ein frohes neues Jahr 2009!

Nun meine Frage: Ist es möglich beim Programmstart herauszubekommen, ob das Programm von eine Netzlaufwerk oder der lokalen Platte gestartet wurde?

Danke.

Gruß
PmSyS

12.04.2007 - 11:02 Uhr

Danke, das war der richtige Anstoss.

Ich hab jetzt:


public MainForm()
{
	...
	this.MaximumSize = new Size(this.Width, Screen.PrimaryScreen.WorkingArea.Height);
		
	init();
}

Guß
pmSyS

12.04.2007 - 10:27 Uhr

Moin Leute,

gibt es eine Möglichkeit, die Breite eines Fensters festzulegen, wobei die Höhe variabel bleibt?

ich hab das so versucht:


private Point currMousePos;


void MainFormResizeBegin(object sender, EventArgs e)
{
	currMousePos = Cursor.Position;
}

void MainFormSizeChanged(object sender, System.EventArgs e)
{
	this.SuspendLayout();
	Cursor.Position = new Point(currMousePos.X, MousePosition.Y);
	this.ResumeLayout();
}

Es funzt, nur gibt es einen unschönen Schleier beim Verändern der Breite, weil die Breite doch geändert wird und dann gleich wieder in die Ausgangsposition gesetzt wird...
Gibt es eine Möglichkeit, den Mauszeiger in x-Richtung zu blockieren?

Gruß
pmSyS

15.03.2007 - 11:51 Uhr

Hmm, schade.
Muss dann nochmal 289mb runterladen.

Trotzdem danke.

15.03.2007 - 11:39 Uhr

Wenn ich theoretisch die Sprache auf deutsch umstellen wollte, müsste ich dann den deutschen Server installieren? Oder gibt es da Sprachpakete?

15.03.2007 - 09:17 Uhr

Moin Leute,

ich hab bei mir zu Hause den SQL-Server 2005 standard in englischer Version laufen.

Jetzt hab ich das SP2 in deutsch runtergeladen. Beim Versuch das Update aufzuspielen, wurde mir gesagt, ich solle das englische Update runterladen und dies installieren.
Wie kann ich das SP2 überreden, doch das Update durchzuführen?
Ich hab zu hause eine schwache Leitung und will es ungern noch einmal in der Arbeit runterladen...

Greetz
pmSyS

07.03.2007 - 10:50 Uhr

Moin,

ich hab nicht viel zu dem Thema gefunden.
Es scheint aber nur dann nicht zu funktionieren, wenn


this.suchen.AutoCompleteSource 

Elemente zugewiesen bekommt, die Angezeigt werden.

Ich hab das erstmal weggelassen. Geht auch so.

05.03.2007 - 16:59 Uhr

Moin Leute,

bin nach längerer Abwesendheit wieder da und hätte gleich eine Frage:

Ich habe in einem MenuStrip eine ToolStripTextBox, die ich zur Suche verwenden will.
Zur Info: Das Suchergebnis markiert einen Eintrag in einer ListBox.
Dem Benutzer soll eine Autocomplete-Funktion zu Seite stehen.

Im 2.0 Framework gibt es die Möglichkeit in Combo, TextBoxen, ... die Autocomplete-Funktion zu verwenden:


...
this.suchen = new System.Windows.Forms.ToolStripTextBox();
this.suchen.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
this.suchen.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource;

IEnumerator ie = ((MessageBundle)resource.BundleContainer[resource.getFirstLocale()]).getKeys().GetEnumerator();
while(ie.MoveNext())
{
	suchen.AutoCompleteCustomSource.Add((string)ie.Current);
}
...

Das ganze funktioniert auch.

Jetzt mein Problem: Ich reagiere auf den "Return" vom Benutzer und fange dann an zu suchen. Das funktioniert so lange wie die ich die Autocomplete-Eigenschaften noch nicht aktiviert habe. Im obigen Fall funktioniert es nicht mehr. Der Return wird nicht abgefangen. Alle anderen Zeichen komischerweise schon...

Habe ich etwas übersehen? Momentan bin ich noch am Bahnhof...

Danke für Anregungen.

Gruß
pmSyS

09.07.2006 - 17:42 Uhr

@Traumzauberbaum:

Danke, hab es mir mal angesehen. Werde bei der obigen Lösung bleiben.

Thank Folks!

09.07.2006 - 01:33 Uhr

Danke,

hab grad beim Googlen auch eine Antwort gefunden:


private void EM_MouseMove(object sender, MouseEventArgs e)
{
     if (e.Button == MouseButtons.Left)
     {
          mousePos = Control.MousePosition;
          mousePos.Offset(mouse_offset.X, mouse_offset.Y);
          Location = mousePos;
     }
}

private void EM_MouseDown(object sender, MouseEventArgs e)
{
      mouse_offset = new Point(-e.X, -e.Y);
}

09.07.2006 - 01:08 Uhr

Moin Leute,

ich habe die Titelleiste meines Fensters ausgeblendet:

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;

Nun kann ich das Fenster nicht mehr in seiner Position verändern.
Was muss ich tun, um es dennoch bewegen zu können?

Greetz
pmSyS

06.06.2006 - 15:07 Uhr

Hmm,

wenn ich mir das jetzt nochmal durchlese, dann fällt mir auf, dass ich vor lauter Bäumen den Wald nicht gesehen habe.

Ist ja klar, dass ein Byte nicht gleich Int ist.
Daher würde das jatzt passen.

Danke für die Erleuchtung...

Gruß
pmSyS

06.06.2006 - 12:53 Uhr

@herbivore

Ich habs mal probiert, aber da kommt eine Zahl raus, manchmal mehrstellig.
Ich möchte aber aus diesen 8 Bit genau 1 Byte machen.

Ich nahme an, dass ich da nicht um logische Operatoren herumkomme...

Ich hab mit diesen aber noch nie gearbeitet...

Gruß

03.06.2006 - 00:56 Uhr

Moin Leute,

hab da ein Problem mit einer Konvertierung:

Ich habe einen String mit bits: "01101100011101001...".
Ich möchte jeweils 8 Bits zu einem Byte zusammenfassen.
Wie geht das?

01101100 = Byte
01110100 = Byte
....

Vielleicht ist das ja ganz easy, aber ich komm da nicht drauf...

Danke.
pmSyS

11.05.2006 - 17:15 Uhr

Richtig,
darauf bin ich nicht gekommen.

Danke.

11.05.2006 - 13:15 Uhr

Moin Leute,

ist es möglich, einen Text um 90° gegen den Uhrzeigersinn zu drehen?
mit "SringFormatFlags.DirectionVertical" kann ich ihn um 90° im Uhrzeigersinn drehen.
Ich hab auch schon mit "GraphicsPath" der "System.Drawing.Drawing2D"-Klasse versucht. Nur da kann man bei einer Schriftgröße von 8 den Text nicht mehr lesen.

Geht das nicht noch anders?

Danke.

Gruß
pmSyS

08.05.2006 - 12:50 Uhr

Ha!

Ich hab den Fehler gefunden.
Aus mir nicht ersichtlichen Gründen hat VS die Parameterzuordnung der Insert, Update... Commands gelöscht.

Das war einfach bei allen DataAdaptern weg:


this.oleDbUpdateCommand3.Parameters.Add(new FbParameter("ID", FbDbType.BigInt, 0, "ID"));

Gruß
pmSyS

08.05.2006 - 08:51 Uhr

Ich hab die v1.5.
Es hat ja mal funktioniert. Ich werd jetzt mal auf Fehlersuche gehen, denn es kann eigentlich nur eine Kleinigkeit sein, die dazu führte.

06.05.2006 - 12:42 Uhr

Ich hatte vorher eine OleDb-Verbindung zu Access.
Ich hab alles bis auf die Namen der Variablen geändert.
Es hat ja funktioniert mit FB.

Am Montag mache ich nochmal Fehlersuche, da der Fehler ja irgendwo zwischen Prog. und DB liegen muss.
Denn wenn ich den normalen FB-Server benutze, dann habe ich keine Probleme über FlameRobin Daten in die DB einzufügen.
Ich versuch mal im Prog. auf den normalen Server umzustellen; mal sehen, ob es dann funzt.

05.05.2006 - 13:36 Uhr

Ich glaube nicht, dass der Source dir hilft, da es ja funktioniert hat, und ich an den Stellen nichts verändert habe...


private void speichern()
		{
			try
			{
				this.oleDbConnection1.Open();
				trans = this.oleDbConnection1.BeginTransaction();

				using(FbCommand delCMD = new FbCommand("DELETE FROM header;", this.oleDbConnection1))
				{
					delCMD.Transaction = trans;
					delCMD.ExecuteNonQuery();
					delCMD.CommandText = "DELETE FROM pruefung;";
					delCMD.ExecuteNonQuery();
					delCMD.CommandText = "DELETE FROM kommentar;";
					delCMD.ExecuteNonQuery();
					delCMD.CommandText = "DELETE FROM fehler;";
					delCMD.ExecuteNonQuery();		
					trans.Commit();
				}

				trans = this.oleDbConnection1.BeginTransaction();

				this.oleDbInsertCommand1.Transaction = trans;
				this.oleDbInsertCommand2.Transaction = trans;
				this.oleDbInsertCommand3.Transaction = trans;
				this.oleDbInsertCommand4.Transaction = trans;
				this.oleDbInsertCommand5.Transaction = trans;

				this.oleDbUpdateCommand3.Transaction = trans;
				this.oleDbUpdateCommand4.Transaction = trans;

				this.statusPanel1.Text = "Speichere Header-Daten";
//				for(int i=0; i<datas.Tables["header"].Rows.Count; i++)
//				{
//					Console.WriteLine(datas.Tables["header"].Rows[i][0] + ";" + datas.Tables["header"].Rows[i][1] + ";" +datas.Tables["header"].Rows[i][2] + ";" + datas.Tables["header"].Rows[i][3] + ";" +datas.Tables["header"].Rows[i][4] + ";");
//				}
				this.dbHeader.Update(datas.Tables["header"]);  //Da "knallts"
				this.statusPanel1.Text = "Speichere Prüfung-Daten";
				this.dbPruefung.Update(datas.Tables["pruefung"]);
				this.statusPanel1.Text = "Speichere Kommentar-Daten";
				this.dbKommentar.Update(datas.Tables["kommentar"]);
				this.statusPanel1.Text = "Speichere Fehler-Daten";
				this.dbFehler.Update(datas.Tables["fehler"]);
				this.statusPanel1.Text = "Bereit";

				trans.Commit();
			}
			catch(Exception e)
			{
				MessageBox.Show(e.Message,"Fehler!",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Error);
			}
			finally
			{
				this.oleDbConnection1.Close();
			}
		}

Der header sieht so aus:


header.Columns.Add("IDvon",System.Type.GetType("System.Int64"));
			header.Columns.Add("IDbis",System.Type.GetType("System.Int64"));
			header.Columns.Add("DatumVon",System.Type.GetType("System.String"));
			header.Columns.Add("DatumBis",System.Type.GetType("System.String"));
			header.Columns.Add("Linie",System.Type.GetType("System.String"));

Connection String:


FbConnectionStringBuilder conStr = new FbConnectionStringBuilder();
				conStr.Database = @".\temp.fdb";		
				conStr.UserID = "xxx";
				conStr.Password = "xxx";
				conStr.Dialect = 3;
				conStr.ServerType = 1;
				this.oleDbConnection1.ConnectionString = conStr.ToString();

und hier noch die FBConnection-Einstellung:


// 
			// dbHeader
			// 
			this.dbHeader.InsertCommand = this.oleDbInsertCommand1;
			this.dbHeader.SelectCommand = this.oleDbSelectCommand1;
			this.dbHeader.TableMappings.AddRange(new System.Data.Common.DataTableMapping[] {
																							   new System.Data.Common.DataTableMapping("Table", "Header", new System.Data.Common.DataColumnMapping[] {
																																																		 new System.Data.Common.DataColumnMapping("DatumBis", "DatumBis"),
																																																		 new System.Data.Common.DataColumnMapping("DatumVon", "DatumVon"),
																																																		 new System.Data.Common.DataColumnMapping("IDbis", "IDbis"),
																																																		 new System.Data.Common.DataColumnMapping("IDvon", "IDvon"),
																																																		 new System.Data.Common.DataColumnMapping("Linie", "Linie")})});
			

05.05.2006 - 13:10 Uhr

Mahlzeit Leute,

Ich bin jetzt fertig mit meiner Programm und muss feststellen, dass Firebird mir eine Fehlermeldung gibt, mit der ich nicht viel anfangen kann. (Siehe Bild)

Was ist da schiefgelaufen?
Ich hab zum Schluss nur noch ein Konsolen-Prog. geschrieben, das die DB-Datei schrumpft (Backup/Restore), da ich es als Embedded einsetze.
Seitdem ich das Prog. mal ausgeführt habe, will mein Hauptprog nicht mehr...
Hab auch versucht, die DB komplett neu aufzubauen mit FlameRobin, aber das hat auch nix genüzt.
Gestern hat es noch funktioniert und ich habe seitdem nichts mehr am Hauptprogramm gemacht, ausser das MainMenu ein bisschen anzupassen.

Hilfee!!

04.05.2006 - 11:25 Uhr

Hmm,

ich hab da schon ein wenig rumgegoogelt, aber nichts passendes zu Firebird und Indizes gefunden.

Und ich nehme an, dass jede DB ein wenig anders im Aufbau der Indizes ist.

Kennt jemand eine gute Doku. für Firebird und Indizes?
Auf deren Seite hab ich auch nichts gescheites gefunden.

03.05.2006 - 16:13 Uhr

Sorry, hab mich falsch ausgedrückt.
Ich meinte nur Abfragen von der DB mit "SELECT...".
Die würde ich noch schneller haben wollen...

03.05.2006 - 15:45 Uhr

Ich muss noch einmal ansetzen und korregieren:

Firebird ist mit einer Transaktion wesentlich schneller als Access.
Hab es damals wohl nicht mit einer Transaktion gemacht...

Ich muss aber anmerken, dass eine Abfrage, je nach Anzahl Daten, doch schon ein paar Sekunden dauert.
Da nützt aber eine Transaktion nichts, zumindest habe ich keine Steigerung festgestellt.

Kann man die "Abfrage"-Geschwindigkeit vielleicht noch ein wenig tunen? Weiss da jemand etwas?

Gruß
pmSyS

02.05.2006 - 08:52 Uhr

Um zu prüfen, ob irgendein Framework installiert ist, überprüfen, ob die Datei C:\Windows\System32\mscoree.dll existiert.

Stimmt, wenn das Framework nicht installiert ist, dann wird eine Fehlermeldung ausgegeben, dass diese Datei fehlt.

Vielen Dank für die Infos.

Gruß
pmSyS

27.04.2006 - 10:16 Uhr

🙂
Hab ich mir schon gedacht...

Das mit dem Loader ist nicht schlecht, aber ich werd dann doch einen Installer verwenden.

Kann man das irgendwie mit dem VS-Installer bewerkstelligen?
Hab mit diesem noch nicht gearbeitet. Oder gibt es irgendwo ein brauchbares Tutorial?
In dem Unternehmen hier darf ich offiziell nur den des VS verwenden 🙁

27.04.2006 - 10:02 Uhr

Moin Leute,

ich hab schon ein wenig in der Forumssuche geschnüffelt, aber nichts gefunden, das mir die folgende Frage beantwortet:

Ist es möglich, in einer .Net Anwendung zu prüfen, ob das Framework vorhanden ist?
Ist das nicht vorhanden, dann verabschiedet sich das Programm mit einer Fehlermeldung, die kein normalsterblicher versteht. (Ich sprech aus Erfahrung)

Ist es möglich zu prüfen, ob alles Benötigte vorhanden ist, bevor die Anwendung richtig startet und somit dann diese Typische Fehlermeldung ausgibt?

Ich wollte dabei nicht umbedingt einen Installer verwenden, der die Arbeit machen würde...

Gruß
pmSyS

24.04.2006 - 16:04 Uhr

Ja ok,
meine DB wird da glaub ich diesen Rahmen nicht erreichen.
Ausserdem läuft sie als Embedded in meiner Anwendung.
Ich kann da mit SQL die tollsten Schweinereien machen.
Da ist schon mal ein select-String locker >1000 Zeichen...

Das wäre mir wohl so leicht nicht möglich, würde ich alles im RAM behalten und die Abfragen über die Datatablels machen. Da wäre glaub ich auch nicht wirklich der komplette Umfang von SQL möglich...

Das wollt ich nochmal loswerden 😉

Greetz
pmSyS

21.04.2006 - 10:33 Uhr

Ok,
danke für die Antwort.

21.04.2006 - 10:08 Uhr

Moin Leute,

mal eine Frage aus Neugier:

Ich hab eine Firebird-DB. Ich hab da Daten eingefügt, die die Datei auf etwa 44MB aufbläst. Als nächstes habe ich die Daten gelöscht, mit der Erwartung, dass die Datei wieder kleiner wird...

Dem war aber nicht so...

Passt Firebird die Dateigröße bei Datenlöschung nicht an?
Weisst da jemand was?

Gruß
pmSyS

20.04.2006 - 11:21 Uhr

Danke,

hast recht.
Hab vor lauter Bäumen nicht gesehen, dass es

... Pruefung.name Like '%';

heissen müsste...
Ich dumm hab doch schon mal mit Oracle gearbeitet, da war das auch so...

Danke Trotzdem!

Gruß
pmSyS

20.04.2006 - 10:47 Uhr

Moin Leute,

ich hab mal wieder ein Problem und weiss nicht recht woran es liegt.

Ich versuche in meiner Anwendung die bis jetzt noch vorhandene Access-"DB" duch Firebird-Enbedded zu ersetzen, da Access einige Grenzen hat, die von der Anwendung öfters überschreitet werden dürfen.

Nun, ich hab soweit alles auf den Firebird-Provider geändert, bekomme aber bei einer einfachen SQL-Abfrage eine Fehlermeldung:


An unhandled exception of type 'FirebirdSql.Data.Firebird.FbException' occurred in system.data.dll

Additional information: Dynamic SQL Error SQL error code = -104 Token unknown - line 1, char 126 *

SQL-String: "SELECT DISTINCT xyz FROM Fehler INNER JOIN Pruefung ON Fehler.ID = Pruefung.ID WHERE Pruefung.name Like *;"

Code:


select = "SELECT DISTINCT " + bez + " FROM Fehler INNER JOIN Pruefung ON Fehler.ID = Pruefung.ID WHERE " + where + ";";

			FbCommand cmd = new FbCommand(select, conn1);
			read = new FbDataAdapter(cmd);
			read.AcceptChangesDuringFill = false;
			ds = new DataTable();
			read.Fill(ds);   // fehler
...

ConnectionString = @"Dialect=3;User Id=SYSDBA;Database=.\temp.fdb;Server Type=1;Password=masterkey"

Laut SQL-Definition von Firebird soll es ja funktionieren... ??
Ich versteh das nicht...

Seh ich den Wald vor lauter Bäumen nicht??

19.04.2006 - 08:36 Uhr

Hmm, da werd ich mir was anderes einfallen lassen müssen.

Gruß
pmSyS

18.04.2006 - 15:36 Uhr

Es müsste aber möglich sein, da ich so etwas schon mal gesehen habe.

Es gäbe vielleicht die Möglichkeit mit dem MouseMove-Event die Koordinaten abzufangen, und wenn diese sich in einem bestimmten Bereich befinden(Tab1), dann den Mauszeiger zu ändern.
Wenn der Bereich wieder verlassen wird, denn Mauszeiger wieder zurückwandeln.

Das wäre aber recht umständlich; es müsste doch etwas einfacheres geben...

18.04.2006 - 14:07 Uhr

Geht das wirklich nicht?

Oder übersehe ich da was...?

18.04.2006 - 09:51 Uhr

Moin Leute,

gibt es eine Möglichkeit bei Tabs in einem TabControl die Register mit einem anderen Mauscursor zu belegen?
Man kann ja den Cursor für das gesamte Control verändern, aber geht es auch nur für die Register oben?

Ich möchte, dass der Cursor sich beim Überfahren der Register in eine z.B. Hand ändert...

Geht das?

Danke.

Gruß
pmSyS

10.04.2006 - 14:09 Uhr

Schade, dass es nicht geht.

Da das nur eine Exportfunktion ist, habe ich das Bild nochmal gezeichnet und diesmal in eine Bitmap geschaufelt.


bmp = new Bitmap(pic.Width,pic.Height);
			
Graphics g = Graphics.FromImage(bmp);

// tue was
			
bmp.Save(file,System.Drawing.Imaging.ImageFormat.Png);

Dank dir.

Gruß
pmSyS

10.04.2006 - 09:31 Uhr

Ja ok, aber wie bekomme ich das auf dem Panel gezeichnete dann da hinein?

Ich will jetzt nicht umbedingt das Panel gegen etwas anderes austauschen...
wie etwa eine PictureBox.

10.04.2006 - 09:08 Uhr

Moin,

das mag sein, aber habe ich nicht bei


g = pic.CreateGraphics();
bmp = new Bitmap(pic.Width,pic.Height,g);

mit

bmp = new Bitmap(pic.Width,pic.Height,g);

das GraphicsObjekt "g" der Bitmap zugewiesen?
Oder hab ich da den Ball noch nicht gefangen...

Ich hab auch probiert das bmp=... kurz vor dem Save erst aufzurufen; brachte allerdings auch nichts.

07.04.2006 - 10:54 Uhr

Moin Leute,

Habe folgenden Code:


		public void getPic()
		{
			// Grafikobjekt erzeugen
			g = pic.CreateGraphics();
			bmp = new Bitmap(pic.Width,pic.Height,g);

			// Zeichen in g rum...

            bmp.Save("xyz",,System.Drawing.Imaging.ImageFormat.Jpeg);
			//g.Dispose();
			
		}

"pic" ist ein Panel.
Wenn ich dieses Bild speichere, dann ist es schwarz, als hätte ich nicht darin gezeichnet...
Hab ich was vergessen?
Ich hab auch schon ein wenig im Forum gesucht, aber nicht passendes gefunden...

Gruß
pmSyS

06.04.2006 - 13:02 Uhr

Hmm, funktioniert.
Ich bin mir sicher, dass ich das ausprobiert habe, als ich seinen Eintrag gelesen habe.

Da hat die Laufzeit mich mit Fehlermeldungen beworfen...

Egal, es funzt.

Dank euch!!

Gruß
pmSyS

06.04.2006 - 10:11 Uhr

Habs geschafft.

Zwar ein wenig umständlich, aber es geht:


				EZDaten.Fill(ds);
				DataTable dt = new DataTable("EZ");
				dt.Columns.Add("SGB",System.Type.GetType("System.String"));
				dt.Columns.Add("TTNR_LP",System.Type.GetType("System.String"));
				dt.Columns.Add("SG_NUTZEN",System.Type.GetType("System.String"));
				DataRow row, row1;

				IEnumerator myenum = ds.Rows.GetEnumerator();
				while(myenum.MoveNext())
				{
					row = (DataRow)myenum.Current;
					row1 = dt.NewRow();
					row1[0] = row[0];
					row1[1] = row[1];
					row1[2] = row[2];
					dt.Rows.Add(row1);
				}
				ds = dt;
				dbEZ.Update(dt);

Ich nehme mal an, dass es am RowState gelegen hat.
Jetzt, da alle Rows neu erstellt wurden, hat das Update gefunzt.

Gibt es aber nicht eine Möglichkeit in der alten DataTable alle Rows als "verändert" zu markieren?

06.04.2006 - 09:02 Uhr

Also, der Code ist folgender:


private void threadEZDaten()
		{
			try
			{
				getEzDaten dat = new getEzDaten(ref EZDaten);
				dat.getData();
				this.dbEZ.Update(dat.getEzDataTable);
				...			}
			catch(Exception e)
			{
				MessageBox.Show(e.Message,"Fehler!",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Error);
			}
		}

Die Klasse getEZDaten:


	public class getEzDaten
	{
		private DataTable ds;
		private System.Data.OleDb.OleDbDataAdapter EZDaten;

		public getEzDaten(ref System.Data.OleDb.OleDbDataAdapter EZDaten)
		{
			ds = new DataTable();

			ds.Columns.Add("SGB",System.Type.GetType("System.String"));
			ds.Columns.Add("TTNR_LP",System.Type.GetType("System.String"));
			ds.Columns.Add("SG_NUTZEN",System.Type.GetType("System.String"));
			
			this.EZDaten = EZDaten;
		}

		/// <summary>
		/// Holt EZ-Daten aus Access Datei
		/// </summary>
		public void getData()
		{
			try
			{
				EZDaten.Fill(ds);
			}
			catch(Exception e)
			{
				throw new getEzDatenException("Fehler: " + e.Message);
			}
		}
     

		public DataTable getEzDataTable
		{
			get
			{
				return ds;
			}
		}
}

Das Table Mapping von VS erstellt:


			// 
			// dbEZ
			// 
			this.dbEZ.DeleteCommand = this.oleDbDeleteCommand1;
			this.dbEZ.InsertCommand = this.oleDbInsertCommand5;
			this.dbEZ.SelectCommand = this.oleDbSelectCommand6;
			this.dbEZ.TableMappings.AddRange(new System.Data.Common.DataTableMapping[] {
																						   new System.Data.Common.DataTableMapping("Table", "EZ", new System.Data.Common.DataColumnMapping[] {
																																																 new System.Data.Common.DataColumnMapping("SG_NUTZEN", "SG_NUTZEN"),
																																																 new System.Data.Common.DataColumnMapping("SGB", "SGB"),
																																																 new System.Data.Common.DataColumnMapping("TTNR_LP", "TTNR_LP")})});
			this.dbEZ.UpdateCommand = this.oleDbUpdateCommand1;
			// 
			// oleDbSelectCommand6
			// 
			this.oleDbSelectCommand6.CommandText = "SELECT SG_NUTZEN, SGB, TTNR_LP FROM EZ";
			this.oleDbSelectCommand6.Connection = this.oleDbConnection1;
			// 
			// oleDbInsertCommand5
			// 
			this.oleDbInsertCommand5.CommandText = "INSERT INTO EZ(SG_NUTZEN, SGB, TTNR_LP) VALUES (?, ?, ?)";
			this.oleDbInsertCommand5.Connection = this.oleDbConnection1;
			this.oleDbInsertCommand5.Parameters.Add(new System.Data.OleDb.OleDbParameter("SG_NUTZEN", System.Data.OleDb.OleDbType.VarWChar, 255, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "SG_NUTZEN", System.Data.DataRowVersion.Default, ""));
			this.oleDbInsertCommand5.Parameters.Add(new System.Data.OleDb.OleDbParameter("SGB", System.Data.OleDb.OleDbType.VarWChar, 20, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "SGB", System.Data.DataRowVersion.Default, null));
			this.oleDbInsertCommand5.Parameters.Add(new System.Data.OleDb.OleDbParameter("TTNR_LP", System.Data.OleDb.OleDbType.VarWChar, 255, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "TTNR_LP", System.Data.DataRowVersion.Default, null));
			// 
			// oleDbUpdateCommand1
			// 
			this.oleDbUpdateCommand1.CommandText = "UPDATE EZ SET SG_NUTZEN = ?, SGB = ?, TTNR_LP = ? WHERE (TTNR_LP = ?) AND (SGB = " +
				"? OR ? IS NULL AND SGB IS NULL) AND (SG_NUTZEN = ? OR ? IS NULL AND SG_NUTZEN IS" +
				" NULL)";
			this.oleDbUpdateCommand1.Connection = this.oleDbConnection1;
			this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("SG_NUTZEN", System.Data.OleDb.OleDbType.VarWChar, 255, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "SG_NUTZEN", System.Data.DataRowVersion.Default, null));
			this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("SGB", System.Data.OleDb.OleDbType.VarWChar, 20, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "SGB", System.Data.DataRowVersion.Default, null));
			this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("TTNR_LP", System.Data.OleDb.OleDbType.VarWChar, 255, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "TTNR_LP", System.Data.DataRowVersion.Default, null));
			this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_TTNR_LP", System.Data.OleDb.OleDbType.VarWChar, 255, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "TTNR_LP", System.Data.DataRowVersion.Original, null));
			this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_SGB", System.Data.OleDb.OleDbType.VarWChar, 20, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "SGB", System.Data.DataRowVersion.Original, null));
			this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_SGB1", System.Data.OleDb.OleDbType.VarWChar, 20, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "SGB", System.Data.DataRowVersion.Original, null));
			this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_SG_NUTZEN", System.Data.OleDb.OleDbType.VarWChar, 255, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "SG_NUTZEN", System.Data.DataRowVersion.Original, null));
			this.oleDbUpdateCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_SG_NUTZEN1", System.Data.OleDb.OleDbType.VarWChar, 255, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "SG_NUTZEN", System.Data.DataRowVersion.Original, null));
			// 
			// oleDbDeleteCommand1
			// 
			this.oleDbDeleteCommand1.CommandText = "DELETE FROM EZ WHERE (TTNR_LP = ?) AND (SGB = ? OR ? IS NULL AND SGB IS NULL) AND" +
				" (SG_NUTZEN = ? OR ? IS NULL AND SG_NUTZEN IS NULL)";
			this.oleDbDeleteCommand1.Connection = this.oleDbConnection1;
			this.oleDbDeleteCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_TTNR_LP", System.Data.OleDb.OleDbType.VarWChar, 255, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "TTNR_LP", System.Data.DataRowVersion.Original, null));
			this.oleDbDeleteCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_SGB", System.Data.OleDb.OleDbType.VarWChar, 20, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "SGB", System.Data.DataRowVersion.Original, null));
			this.oleDbDeleteCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_SGB1", System.Data.OleDb.OleDbType.VarWChar, 20, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "SGB", System.Data.DataRowVersion.Original, null));
			this.oleDbDeleteCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_SG_NUTZEN", System.Data.OleDb.OleDbType.VarWChar, 255, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "SG_NUTZEN", System.Data.DataRowVersion.Original, null));
			this.oleDbDeleteCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("Original_SG_NUTZEN1", System.Data.OleDb.OleDbType.VarWChar, 255, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "SG_NUTZEN", System.Data.DataRowVersion.Original, null));


Mehr ist da nicht.
Ich hab auch schon mal das gesamte DataSet/DataTable kopiert, brachte aber auch nix.

05.04.2006 - 16:01 Uhr

mit der Forumssuche gehts schneller:

Column als DataSource mit DataBinding

05.04.2006 - 15:55 Uhr

Tach Leute,

ich weiss, das Thema ist nicht neu, aber ich hab hier im Forum gesucht und doch nix gefunden...

Also, ich "importiere" mit einem DataAdapter bestimmte Daten aus DB1(Access) in ein DataTable.
Diese DataTable möchte ich wieder unverändert in eine DB2(Access) schreiben.
Ich benutze VS .Net 2003 und habe in meinem Prog schon ein DataSet samt DataTables manuell gefüllt und per Update in DB2 gespeichert. Das funzt.
Ach ja, die DataAdapter sind alle von VS generiert; mit (Update, Insert, usw)-Commands.

Nur das "kopieren von DB1 nach DB2 will nicht. Er meldet auch keine Fehler oder sonst was.
Ich hab auch schon die "RowUpdated" und "...ing" Ereignisse missbraucht, um an Infos zu kommen, doch diese wurden gar nicht gefeuert.
D.h. er macht das Update gar nicht...

Liegt es daran, dass ich das DataTable nicht ändere??
Die RowState-Eigenschaft kann ich ja nicht ändern...
Habe ich etwas übersehen??

Dank euch schon mal.

Gruß
pmSyS