Laden...

Forenbeiträge von mipa_acc Ingesamt 318 Beiträge

27.11.2008 - 14:08 Uhr

Hallo,

ich habe ein kleines Problem...

Hab schon hier im Forum gesucht aber leider nichts passendes gefunden.

Ich selektiere per Code ein Item in meiner ListView. Dieses wird dann grau hinterlegt. Ich würde gerne diese Farbe ändern. Ich würde Sie dann in ein Blau ändern dass es so aussieht als hätte man es mit der Maus selektiert.

Hat einer von euch eine Idee wie das geht?

Vielen Dank im Vorraus

MfG

18.09.2008 - 21:04 Uhr

Das DisplayMember ist das Tag propertie des ComboBox. Nicht aber für jedes Item einzeln.

MFG

18.09.2008 - 20:31 Uhr

Hallo,

ich habe eine ComboBox die ich mit Items fülle. Hierbei handelt es sich um Strings. Die Strings sind Adressen. Z.b Herr - Hans - Musterman - Musterstr. - 1

Diese Adress Daten stehen in Adress Objekten. Jetzt würde ich gerne an das Item irgendwie dieses Adress Objekt binden. Bei ListView´s habe ich das mit Item.Tag gemacht. Dies gibt es aber hier nicht.

Wenn ich mir eine Eigene Klasse schreiben, dann sehe ich in der ComboBox immer den Name der von mir erstellen Container Klasse.

Hättet ihr eine Idee wie ich das sonst noch machen könnte?

Vielen Dank im Vorraus

MFG

09.09.2008 - 17:02 Uhr

Hallo,

ich muss auf einem Ftp Server Ordner löschen. Es können auch komplette Ordner strukturen sein. Daten sind keine mehr in den Ordnern vorhanden. Die werden alle gelöscht.
Mein Problem ist nun, dass ich nicht einfach den ersten Ordner löschen kann und dann alle anderen weg sind. Ich muss mit den letzten anfangen und mich dann zum Anfang vor arbeiten. Leider hört sich das leichter an als es ist.

Akutell hab ich mir gedacht, dass ich es so machen könnte, dass ich rekursiv alle Ordner ermittle. Die Pfade der Ordner speichere ich dann in eine Liste. Diese Liste wird dann sortiert und zwar so, dass die längsten Pfade am Anfang der Liste stehen, je kürzer der Pfad desto weiter hinten in der liste steht er. Dann einfach über die Liste loopen und alles löschen.

Problem ist nur, wie bekomme ich raus, was längere Pfade sind und was kürzere. Hätte mir gedacht, bei dem Zeichen "/" Splitten, dann zählen wie viele Teile ich habe und so kann ich feststellen was kürzer, bzw. länger ist.

Das ist alles viel Aufwand um einen Ordner zu löschen.

Wollte euch mal fragen, ob ihr bessere Ideen habt. Bin für alles offen 😉

Evtl. habt ihr/kennt ihr ja schon irgend einen Code der das Problem löst.

Bin für jeden Denkanstoß dankbar.

Vielen Dank im Vorraus!

26.07.2008 - 11:12 Uhr

Hallo,

ich habe ein ganz simple Frage, und zwar kann man doch im Designer Modus die Properties von z.B Controls ändern.
Jetzt habe ich mir selber ein Control gebaut und will meine erstellten Properties im Designermode im Propertie Fenster sehen.

Ich hab´s mal gewusst aber irgendwie verdrängt. Weiß nur, dass ich irgend nen Code über mein Propertie schreiben muss. War nur eine Zeile

                [IRGEND EIN CODE]
		public Color BorderColor {
			get { return _BorderColor; }
			set { _BorderColor = value; }
		}

Hoffe ihr wisst was ich meine.

Vielen Dank!

16.06.2008 - 15:43 Uhr

Ja, hab ich schon probiert. Ich hab auch schonmal das Projekt neu erstellen lassen.

16.06.2008 - 15:21 Uhr

Hallo,

ist es möglich, dass ich selbst erstellte Resource Dateien in einem anderen Namespace verwende? Ich habe schon versucht, den Access Modifier auf public zu setzen. Das half aber leider auch nichts.

In meinem anderen Namespace sehe ich die Dateien nicht.

MFG

16.06.2008 - 15:18 Uhr

Hi,

wie das im Kompakt Framework geht weiß ich nicht, ich kann mir aber gut vorstellen, dass es genau so funktioniert wie im "normalen" Framework und da gehts so:


            RegistryKey huhu = Registry.CurrentUser;
            huhu.CreateSubKey("MyKey");
            huhu = Registry.CurrentUser.OpenSubKey("MyKey", true);
            huhu.CreateSubKey("SubKey");
            huhu = Registry.CurrentUser.OpenSubKey("MyKey\\SubKey", true);
            huhu.CreateSubKey("testi");
            huhu = Registry.CurrentUser.OpenSubKey("MyKey\\SubKey \\testi", true);
            huhu.SetValue("Hallo", "no");

Hier wird in deinem CurrentUser ein neuer Key namen´s "MyKey" erstellt und darin dann ein Key namens "SubKey" und hierin dann ein Value namens testi mit dem Wert hallo.

MFG

12.06.2008 - 14:00 Uhr

Hallo,

ich habe mir eine eigene (ich nenn sie einfach Sprachfile) mittels des CultureAndRegionInfoBuilder erstellt bzw. Registriert. Hier wäre der Code dafür


//Neue Culture namens de-BY (Bayrisch) erstellen
            CultureAndRegionInfoBuilder Carib = new CultureAndRegionInfoBuilder("de-BY", CultureAndRegionModifiers.None);
            
            //Deutsche CultureInfo instanzieren, um nachher Daten von der Instanz zu holen
            CultureInfo GermanCultureInfo = new CultureInfo("de-DE");

            //Daten von der Deutschen CultureInfo in meine Bayrische packen
            Carib.LoadDataFromCultureInfo(GermanCultureInfo);

            //Das selbe mit den Region Informationen machen
            RegionInfo GermanRegionInfo = new RegionInfo("DE");
            Carib.LoadDataFromRegionInfo(GermanRegionInfo);

            //Hier könnte man evtl. noch Daten wie Datumsformat, Nummernformat, etc. ändern
            Carib.CultureEnglishName = "German (Bavarian)";
            Carib.CultureNativeName = "de-BY";
            Carib.CurrencyEnglishName = "BY";
            Carib.CurrencyNativeName = "DEB";


            //Die neue CultureInfo Registrieren (d.H die Kulturinformationen auf dem Computer bleiben, 
            //auch wenn er ausgeschaltet wird. Sie müssen auf dem Computer, auf dem die benutzerdefinierte
            //Kultur registriert ist, über Administratorrechte verfügen,)
            if (!System.IO.File.Exists(System.Environment.GetFolderPath (Environment.SpecialFolder.System).Replace("system32", "") + "\\Globalization\\de-BY.nlp")) {

                Carib.Register();    
            
            }

Das funktioniert auch wunderbar. D.H ich habe in meinem Windows/Globalization Ordner eine Datei namens "de-BY.nlp".

Nun ist es mir möglich diese in meinem Programm wie folgt aufzurufen: CultureInfo ci = new CultureInfo("de-BY");

Das funktioniert ohne Fehler. Was ich aber jetzt eigentlich will ist, dass ich in dem Language Propertie meiner MainForm diese Sprache auswählen kann, damit ich mir die resx Datei vom Studio erstellen lassen kann. Mein Problem ist nur, dass ich meine eigene Definierte Sprache da nicht auswählen kann und ich leider keinen Plan habe wie ich die da rein bekommen.

Hätte irgendwer für mich evtl. einen kleinen Denkantoß?

Vielen Dank im Vorraus

MFG mipa_acc

11.06.2008 - 16:58 Uhr

Hallo Community,

ich habe heute schon die MSDN (Thema Lokalisierung von Software) durchgelesen.

Allgemein find ich das echt klasse und sehr einfach. Was ich bräuchte ist, dass ich in so eine Textresource eine Varibale speichern kann.

Ein Beispiel:
Ich habe in einer Messagebox einen Text (z.B Das Wetter am 11.06.2008 ist schön). Dieser Text soll sich aber immer auf das heutige Datum bezieen also morgen soll da "Das Wetter am 12.06..2008 ist schön" stehen. Was ich nun suche ist eine Möglichkeit Elegant diesen Text mit aktuellen Datum in eine Resource zu speichern. Elegant deswegen, weil ich auch einfach in meine Resource "Das Wetter am ##+#+# ist schön" schreiben kann und anschließend einfach MessageBox.Show(myResourceManager.GetString("strMessage").Replace("##+#+#", DateTime.Now.ToString())); schreiben könnte

Was mir sinnvoll erscheint wäre, dass ich in der Resource ein Jokerzeichen setzte, was ich später (wenn ich die Resource in meinem Code verwende) füllen kann.

Hoffe ich hab das einigermaßen verständlich rüber gebracht.

Vielen Dank im Vorraus

MFG mipa_acc

23.04.2008 - 13:15 Uhr

Hallo Männer,

vielen Dank für eure Tipp´s jetzt funktioniert´s auch!

MFG

22.04.2008 - 23:55 Uhr

Hallo,

ich Sitze nun schon seit einer Weile an einem seltsamen Problem...

Folgender Sachverhalt: Ich hab eine Klasse. Diese soll bescheid geben wenn etwas in einer Liste durchgelaufen ist. Hier mal der Code meiner "Sender" Klasse:


public class LedToucher {

		public delegate void SequenzPassDelegate();
		public event SequenzPassDelegate SequenzPassEvent;

		public delegate void SequenzFinishDelegate();
		public event SequenzFinishDelegate SequenzFinishEvent;

		public LedToucher() {



		}

		public void StartTouching(bool endless) {

			_LedToucherThread = new Thread(new ThreadStart(TouchLedModule));
			_LedToucherThread.Start();
			
			_StopCurrentTouching = endless;

		}

		private void TouchLedModule() {

			SequenzPassEvent = new SequenzPassDelegate(TouchLedModule);

			//Do-While, damit die Sequenz mindestens einmal durchläuft.
			//falls man unendlich will check die schleift das zum Schluss ab.
			do {

				foreach (SequenzStep currentStep in _Sequenz.SequenzStepCollection) {

					if (open_port() == 1) {

						//TouchLedModule();
						write_port(currentStep.Value);
						System.Threading.Thread.Sleep(currentStep.ActiveTime);

					} else {

						MessageBox.Show("Der Treiber wurde noch nicht gestartet. Bitte Treiber \"giveio\" starten.",
							"LedBrowser", MessageBoxButtons.OK, MessageBoxIcon.Error);

						break;
					}
				}

				//Event werfen, dass die Sequenz durchgelaufen ist.	
				if(SequenzPassEvent != null) {
				
					SequenzPassEvent.Invoke();				
				
				}

			} while (_StopCurrentTouching == true);

						
			//Event werfen, damit in der MainForm der Startbutten wieder aktiviert werden kann
			SequenzFinishEvent.Invoke();

		}

}

Das der Event von einem Separatem Thread aus aufgerufen wird sollte ja egal sein.

Hier ist ein Kleiner Teil meiner Main Klasse. Wie man sieht abboniere ich im Konstruktor die Event´s. Leider tut sich da nie was. Bin wirklich schon am verzweifeln und hab auch schon viel Probiert, aber ich kann es einfach nicht verstehehn, warum mein Programm nie in die entsprechenden Methoden (_MyLedToucher_SequenzFinishEvent), (_MyLedToucher_SequenzPassEvent) springt.

Hier der Code meiner Main Klasse:


public partial class MainForm : Form {

private LedToucher _MyLedToucher; 

public MainForm() {

			//Events von LedToucher Abonnieren
			_MyLedToucher = new LedToucher();
			//Event tritt ein, wenn der Toucher mit einer Sequenz fertig ist (und dann nicht mehr wiederholt)
			_MyLedToucher.SequenzFinishEvent += new LedToucher.SequenzFinishDelegate(_MyLedToucher_SequenzFinishEvent);

			//Event tritt auf, wenn eine Sequent komplett durchlaufen ist.
			_MyLedToucher.SequenzPassEvent += new LedToucher.SequenzPassDelegate(_MyLedToucher_SequenzPassEvent);

}

		public void _MyLedToucher_SequenzFinishEvent() {


		}

		public void _MyLedToucher_SequenzPassEvent() {
			//Dieser Event tritt ein, wenn die Sequenz einmal durchlaufen ist.
			//Falls sie endlos laufen soll passiert nichts, andern falls 
			//wird der Startbutton wieder enabled

			if (endlessListRunToolStripButton.Checked == false) {

				startPreviewToolStripButton.Enabled = true;

			}
		}

}

Bitte um einen kleinen Denkanstoß.

Vielen Dank im Vorraus

MFG mipa_acc

08.04.2008 - 10:55 Uhr

@ Mystique: danke für den Tipp. Das Programm ist das was ich gesucht habe!

@ JAck30lena: Ich nehm in C# int, weil das dem long in VB6 entspricht. Wenn ich das VB6 int wollte, dann müsste ich in C# int16 verwenden.

Es lag an den Methoden Namen. Ich bin echt so ein knaller... Aber wenn man dann mal so lang davor sitzt checkt ich es immer nicht mehr richtig...
Jetzt weiß ich auch warum er keinen Einstiegspunkt findet. Für die Methode OpenPort gibts ja in der Dll auch keinen. Für die Methode open_port hingegen schon. Und dank dem Dependency Walkter weiß ich auch wie der aussieht (0x00001000).

Ich geh mal davon aus, dass das irgend eine Speicheradresse ist oder? Was sagt die genau oder für was braucht man die? Das brauch ich zwar jetzt nicht für mein Programm, mich würds aber trotzdem intressieren.

Vielen Dank nochmal!

MFG

08.04.2008 - 00:36 Uhr

Hallo,

ich habe jetzt einfach mal einen Screenshot angehängt. Da ich jetzt das "Studio" für VB 6 drauf hab konnte ich herausfinden, welche Methoden genutzt werden und habe diese importiert.

Ich poste hier mal den VB6 Code. Ich hoffe ich habe alles richtig in C# übernommen.


Private Declare Function OpenPort Lib "parport" Alias "open_port" () As Long
Private Declare Sub ClosePort Lib "parport" Alias "close_port" ()
Private Declare Sub WritePort Lib "parport" Alias "write_port" (ByVal x As Long)
Private Declare Function ReadPort Lib "parport" Alias "read_port" () As Long


Dim Anzahl As Integer
Dim I As Integer
Dim Bytes(100) As Integer


Sub lies_datei()

    Dim Intervall As Integer
    Dim lngKanal As Long
    
    lngKanal = FreeFile
    
    Open "Inputdaten.dll" For Input As #lngKanal
    
    Input #lngKanal, Intervall
    Timer1.Interval = Intervall
    
    Anzahl = 0
    While Not EOF(1)
        Input #lngKanal, Bytes(Anzahl)
        Anzahl = Anzahl + 1
    Wend
    Close #lngKanal
    
End Sub


Private Sub Form_Load()

    If OpenPort = 1 Then
        Label1.Caption = "Läuft"
    Else
        Label1.Caption = "FEHLER!"
    End If
    
    Call lies_datei
    
End Sub

Der C# Code sieht wie folgt aus:



		#region DLL´s Importieren
		[DllImport("parport.dll")]
		private static extern int OpenPort();

		[DllImport("parport.dll")]
		private static extern int ClosePort();

		[DllImport("parport.dll")]
		private static extern int WritePort(int x);

		[DllImport("parport.dll")]
		private static extern int ReadPort();
		#endregion

public bool CheckDriverStatus() {

			if (OpenPort() == 1) {

				//Treiber Läuft
				return true;
			}
			else {

				//Treiber läuft nicht
				return false;
			}

		}


Compilieren kann ich es, aber beim starten bekomme ich die Fehlermeldung: Der Einstiegspunkt OpenPort wurde nicht in der DLL parport.dll gefunden.

Mit der kann ich leider nichts anfangen. Hab diese als Anhang angefügt.

Vielen Dank für eure Hilfe!

MFG mipa_acc

07.04.2008 - 16:51 Uhr

Hallo,

das wollte ich jetzt machen, da hab ich aber eine Fehlermeldung bekommen, da das Studio meint, sie keine gültige Assembly oder Com Komponente ist.

Ich habe aber ein VB6 programm das die Dll auch verwendet. Da ich mir aber erst VB6 Studio besorgen muss konnte ich mir auch die Methoden nicht ansehen.

Ich frage mich wie das dann in dem VB6 programm gemacht wurde.

MFG

07.04.2008 - 16:19 Uhr

Hallo,

ich habe ein kleines Problem und zwar habe ich eine Dll (parport.dll). Mittels dieser kann ich auf die Ltp Schnittstelle zugreifen. Mein Problem ist nur, dass ich leider nicht weiß, was mir die Dll für Methoden bereit stellt. Ich habe schon gegoogelt und leider nichts gefunden was mich weiter bringt.

Kennt ihr einen weg wie ich die Methoden rausfinden kann?

Vielen Dank im Vorraus

MFG Mipa_acc

18.03.2008 - 03:26 Uhr

Hi,

die Komplette Tastatur würde ich einfach über den Gerätemanager deaktivieren. Wie man auf den mittels C# Code kommt weiß ich leider nicht.

Um einzelne Tasten zu deaktivieren wäre es am besten einen Dienst zu schreiben der alle Tastaturanschläge abfängt und bei einer entsprechenden Taste den Handle abbricht. Wenn du das dann schön hättest könntest du so naütrlich auch die komplette Tastatur deaktivieren in dem du einfach überhaupt kein Zeichen zulässt. Das ist aber sicherlich nicht der beste Weg.

Ich hätte hier sogar ein paar nützliche Links für den Windows Dienst:
http://www.dotnet-snippets.de/dns/globale-keyhook-SID730.aspx
http://www.codeproject.com/KB/system/globalsystemhook.aspx

Hoffe ich konnte helfen.

MFG

14.03.2008 - 11:41 Uhr

Hallo,

ich sitze nun schon seit einer ganzen Weile an diesem eigentlich simplem Problem, aber ich versteh es einfach nicht.
Hoffe jemand von euch kann mir helfen.


ListViewItem itm;

	itm = siasRemoteListView.Items.Add(currentRemoteComputer);
					itm.Tag = myFtpToucher;

					//Jetzt das Verzeichnis auf dem Ftp Server wechseln (hat den Computername)
					myFtpToucher.OrdnerWechseln(currentRemoteComputer);
					try {
                                                //Hier habe ich die Richtige Anzahl der Bilder
						string[] ImageFiles = myFtpToucher.DateienAuflisten(".jpg");
						string[] LogFiles = myFtpToucher.DateienAuflisten(".log");
						string[] ListFiles = myFtpToucher.DateienAuflisten(".xml");

						#region Nun die gezählten Bild- und Log Dateienanzahlen eintragen
						//Wenn der Erste eintrag in dem string Array "NoFilesFound" ist,
						//Dann muss 0 eingetragen werden.

						//Bilder
						if (ImageFiles[0] == "NoFilesFound") {

							itm.SubItems.Add("0");
							itm.SubItems[0].Tag = ImageFiles;

						} else {

							itm.SubItems.Add(ImageFiles.Length.ToString());
							itm.SubItems[0].Tag = ImageFiles;

						}

						//Log Files
						if (LogFiles[0] == "NoFilesFound") {

							itm.SubItems.Add("0");
							itm.SubItems[1].Tag = LogFiles;

						} else {

							itm.SubItems.Add(LogFiles.Length.ToString());
							itm.SubItems[1].Tag = LogFiles;
						}

						//Listen
						if (ListFiles[0] == "NoFilesFound") {

							itm.SubItems.Add("0");
							itm.SubItems[2].Tag = ListFiles;

						} else {

							itm.SubItems.Add(ListFiles.Length.ToString());
							itm.SubItems[2].Tag = ListFiles;

						}

Wie ich in dem Kommentarten schon geschrieben habe werden die Daten richtig aufgelistet, d.H, ImageFiles hat 12 Elemente, LogFiles hat 4 Elemente und ListFiles hat kein Element.

Mein ListView hat folgende 4 Splaten nämlich "Remotename" (wird mit siasRemoteListView.Items.Add(currentRemoteComputer); korrekr gefüllt)
Als zweite Spalte habe ich "Anzahl Bilder" da greife ich mit itm.SubItems.Add(ImageFiles.Length.ToString()); zu. Hier gehts schon los, dass manchmal hier die Anzahl der LogFiles drinn steht warum weißt ich nicht. Wenn ich debugge steht eigenltich die Anzahl der Bilder da...
Als dritte Spalte habe ich "Anzahl Log Files" was ich dann mit itm.SubItems.Add(LogFiles.Length.ToString()); versuche zu füllen wobei hier manchmal die Anzahl der ImageFiles steht.
Als viertes hab ich dann noch die Splate "ListFiles" und wird mit itm.SubItems.Add(ListFiles.Length.ToString()); gefüllt was auch passt.

Vielen Dank im Vorraus

25.01.2008 - 08:30 Uhr

Hallo,

ich habe hier und auch in Google gesucht, leider aber mir mienen Suchbegriffen nichts gefunden...

Zu meiner Frage, ich will verhindern, dass mein Programm 2mal aufgerufen wird. Aktuell mache ich das mit folgendem Code:


            foreach (System.Diagnostics.Process myProcess in myProcesses) {

                if (myProcess.ProcessName == ProcessName) {

                    AllowedToStart = false;

                }
            }

            if(AllowedToStart == true) {
            
                Application.Run(new MainForm(AutostartName));
            
            }


Das Problem ist nur, dass das nicht immer funktioniert. Wenn ich das Programm einmal starte, dann den Prozess Kille und das Programm nochmal starten will funktioniert es nicht obwohl es eigentlich müsste, da ja kein Prozess mit diesem Namen mehr vorhanden ist.

Ein Freund von mir hat gesagt, dass man das normal auch nicht so macht wie ich und das es für dieses Problem extra was gibt. Leider weiß er nicht mehr nach was ich da Suchen muss.

Ich wäre auch schon um einen kleinen Tipp sehr dankbar, weil ich das nicht verstehe, dass mein Code nicht geht.

Vielen Dank im Vorraus

MFG

22.01.2008 - 15:39 Uhr

Hi,

Hat wunderbar funktioniert.

Vielen Dank!

MFG

22.01.2008 - 13:34 Uhr

Hallo,

ja, ich meine eine Desktopverknüpfung.

Wie kann ich mir so eine Verknüpfung ansehen?

Wenn ich in die Eigenschaften sehe, dann weiß ich zwar was wo hin muss, wie ich die Datei selber erstelle weiß ich allerdings noch nicht oder doch?

MFG

22.01.2008 - 13:33 Uhr

Hi,

das Buch ist für einen Anfänger in Ordnung würd ich sagen:
http://www.terrashop.de/82726374P/artikel.php?r=mycsharp_1106

Welche Bücher ich aber immer empfehlen kann, sind Bücher von Addison-Wesley. Sind zwar nicht grad die Billigsten aber sehr gut gemacht.

MFG

22.01.2008 - 11:29 Uhr

Hallo,

ich muss von meinem Programm aus eine Verknüpfung erstellen, darf aber keine Zusätzlichen DLL´s verwenden. Hintergrund ist der, dass viele Leute meine EXE verwenden werden. Das Programm soll man aber nicht installieren müssen, sondern einfach nur ausführen. Deshalb wäre es auch nicht so toll, wenn die EXE nur funktioniert wenn man eine DLL daneben legt.

Aktuell kann ich zwar eine Verknüpfung erstellen, ich vernwende dazu aber die "Interop.IWshRuntimeLibrary.dll". Ich hab schon viel rumgesucht (hier und in google) aber überall wird nur diese DLL verwendet.

Kennt jemand eine Methode, bei der ich keine DLL verwenden muss?

Vielen Dank im Vorraus

MFG mipa_acc

07.01.2008 - 10:00 Uhr

Hallo,

ich bin grad dabei, dass ich mir ein Programm schreibe welches mir ein paar Systeminformationen auslesen kann.

Ich bin grad dabei, den Windows Produkt Key auszulesen.


 RegistryKey rk = Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenSubKey("Microsoft").OpenSubKey("Windows NT").OpenSubKey("CurrentVersion");
                object master = rk.GetValue("DigitalProductId");

In der Registry stehen einige Hex Werte drinn. Mit dem Code mti dem ich den Produkt Key auslese bekomme ich diese Werte dann als Binäres Byte Array zurück.

Weiß jemand von euch wie ich das nun in Ascii Zeichen umwandeln kann?

Der Erste Hex Wert in der Registry ist a4. Das entspricht Binär 164. Nun habe ich im Internet eine Ascii Tabelle gesucht und wollte mir das entsprechende Zeichen aufschreiben was ich leider nicht machen konnte, da ich 164, bzw a4 nicht finde.

Har irgendwer von euch eine Idee?

MFG

29.12.2007 - 14:48 Uhr

Hallo,

ich hoffe ich Post hier in dem richtigen Thema, aber wüsste nicht wo das sonst passen sollte. Es hat ja irgendwie was mit Windows Forms zu tun denn ich habe mein Programm zuerst als Windows Forms Anwendung geschrieben. Hier ist es mit möglich mit folgendem Code einen Screenshot :


private void SnapShot(int imageQuality, string destinationPath, int resolutionInPercent) {

			CrossClass myCrossClass = new CrossClass();

			//Dateinamen zusammenbauen
			string ImagePath = destinationPath + "\\" + DateTime.Now.ToString().Trim().Replace(':', '-') + ".jpg";

			try {
                                //In der Windowsanwendung kann ich hier was sehen, in der Konsolenanwendungnicht.
				object ThingsInClipboard = Clipboard.GetDataObject();
				object HopeBitmap = Clipboard.GetText();

				//Eddi - Hier wird das Drücken der Druck-Taste Simuliert und dann als Bitmap gespeichert.
				//In meinem Windows Forms Projekt mache ich EXAKT das selbe und da funktioniert es.
				//Hier ist das myBitmap immer null.
				//Hier wird das drücken der "druck" - Taste simuliert.
				keybd_event(VK_SNAPSHOT, 0, 0, 0);
				keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0);
				Application.DoEvents();

				//Hier Speichere ich mir den Screenshot als Bitmap
				Bitmap myBitmap = new Bitmap((Image)Clipboard.GetDataObject().GetData(DataFormats.Bitmap));

				//Hier wird das Bild als jpg umgewandelt, die Qualität verringert, Farbtiefe und Auflösung verändert.
				EncoderParameter qualityParam = new EncoderParameter
								(System.Drawing.Imaging.Encoder.Quality, imageQuality); // Encoder parameter for image quality

				//Farbtiefe
				EncoderParameter colorDepthParam = new EncoderParameter(System.Drawing.Imaging.Encoder.ColorDepth, 16L);

				//Auflösung
				Size OldSize = myBitmap.Size;
				myBitmap.SetResolution(OldSize.Width * resolutionInPercent / 100, OldSize.Height * resolutionInPercent / 100);

				// Jpeg image codec
				ImageCodecInfo jpegCodec =
				   this.getEncoderInfo("image/jpeg");

				EncoderParameters encoderParams = new EncoderParameters(2);
				encoderParams.Param[0] = qualityParam;
				encoderParams.Param[1] = colorDepthParam;

				//Hier wird das Bild gespeichert.		
				myBitmap.Save(ImagePath, jpegCodec, encoderParams);

Das funktioniert bei der Windows Anwendung ohne Probleme. In meiner Konsolenanwendung ist alles was ich von Clipboard bekomme null.

Wisst ihr warum das so ist und habt ihr evtl. eine Lösung parat?

Vielen Dank im Vorraus

MFG

27.12.2007 - 15:10 Uhr

Hallo,

ich habe zwei Probelme mit meinem Ftp Upload.

Zu meinem ersten:

Ich verwende folgenden Code um eine Datei auf meinen Ftp raufzuladen:





using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
using System.Windows.Forms;

namespace SiAs {

    public class FtpUpload {

        #region Private Field Variables

        #endregion

        #region Constructor
        public FtpUpload() {



        }
        #endregion

        #region Properties

        #endregion

        #region Public Methods

        public void SaveOnFtP(string PathToFile) {

            // Create a new 'Uri' object with the specified string.
            Uri myUri = new Uri("ftp://forrexx.de");

            //Ein Request erstellen an den ftp Server
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(myUri);

            //Die Methode angeben um eine Datei hochzuladen
            request.Method = WebRequestMethods.Ftp.UploadFile;

            //Berechtigungsdetails setzen vom ftp Server durch Username und Passwort
            request.Credentials = new NetworkCredential("ichselber", "12345");

            try {
                //Versuch eine Verbindung zu erstellen und eine Antwort zu erhalten
                WebResponse response = request.GetResponse(); //Hier bekomme ich jedesmal einen Fehler
                MessageBox.Show("Response hat funktioniert"); 
            } catch (Exception exp) {
                MessageBox.Show(exp.ToString());
            }


            FileStream fs = new FileStream(PathToFile, FileMode.Open);
            byte[] fileContents = new byte[fs.Length];
            fs.Read(fileContents, 0, Convert.ToInt32(fs.Length));
            fs.Flush();
            fs.Close();


            //Ein neuen Stream für den Request erstellen dem der FileStream mitgegeben wird.
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(fileContents, 0, fileContents.Length);
            requestStream.Close();

            //Verbindung abbschliessen
            request.Abort();
        }

        /*
         * Die Datei ist nun auch lokal gespeichert
         *und muss dort wieder gelöscht werden.
         */


        #endregion

    }
}

In der Zeile: WebResponse response = request.GetResponse();
bekomme ich jedesmal einen Fehler der mir sagt, dass es nicht möglich war mich mit dem Ftp zu verbinden. Das kann ich aber überhaupt nicht verstehen, da ich wenn ich ftp://forrexx.de in meinen Brower eingebe und dann meine Zugangsdaten (die hier falsch sind) eingebe ich auf meinen Ftp komme. Wenn ich das alles in meinen Code eingebe funktioniert es aber nicht. Hat irgendwer eine Idee wieso?

Vielen Dank im Vorraus.

MFG

26.12.2007 - 15:08 Uhr

Hallo,

ich möchte ein Programm von mir so erweitern, dass es seinen Dienst verrichtet wenn man eine Bestimmte Tastenkombination drückt. Das Problem an der ganzen Sache ist nur, dass es das auch tun soll, auch wenn das Programm im Tray minimiert ist. D.h ich kann nicht einfach auf die Key Event´s in meiner Haupt Form reagieren.

Leider habe ich bisher hier und auch in Google nichts gefunden. Hätte auch schon in VistualStudio in den verschiedenen Klassen wie System.Applications oder System.Windows.Forms gesucht aber leider vergebens.

Ich hoffe nicht, dass ich das nur über Windows API machen kann, weil ich da gar nicht weiß wo ich zu suchen anfangen soll.

Vielen Dank im Vorraus.

MFG mipa_acc

28.11.2007 - 09:42 Uhr

Hallo,

ich habe schon in Google und hier im Board gesucht aber leider nichts passendes gefunden.

Mein Problem ist, dass ich Einige Textdateien auslese. Ab und zu kann es auch vorkommen, dass ein anderes Programm auch diese Textdatei ließt und sie deshalb schon verwendet wird.

Wenn nun mein StreamReader diese Datei Lesen will bekomme ich eine Ausnahme in der steht, dass die Datei von einem anderen Prozess verwendet wird.

Meine Frage, warum ist das so? Es Lesen ja beide Programme und da sollte es doch keien Probleme geben...

Kann ich meine Textdatei auch irgendwie anders öffnen um den Inhalt aus zu lesen?

Vielen Dank im Vorraus.

MFG mipa_acc

26.11.2007 - 14:05 Uhr

Hallo Peter,

So etwas mache ich natürlich schon:



			SvgAboutInfo myInfo = new SvgAboutInfo();
			myInfo.AboutInformationChangedEvent += new SvgAboutInfo.AboutInformationsChangedDelegate(DoSomething);

Das sollte aber normal auch in Ordnung sein oder?

26.11.2007 - 13:57 Uhr

Hallo,

eigentlich habe ich das schon einige male gemacht, weshalb ich grad ein bisschen verweundert bin, dass das jetzt nicht funktioniert.

Ich habe eine Klasse, in der in einem Propertie ein Event auslösen möchte. Das mache ich wie folgt:


public class SvgAboutInfo {
		private string _AboutInformations;
		private string _Product;
		private string _Version;
		private string _Company;
		private string _CopyRight;

		public delegate void AboutInformationsChangedDelegate();
		public event AboutInformationsChangedDelegate AboutInformationChangedEvent;

		public SvgAboutInfo() {



		}

		//Hier nich einen Event werfen, wenn sich das Propertie geändert hat, damit die AboutForm weiß,
		//wann wie die RichTextBox aktualisieren soll
		public string AboutInformations {
			get { return _AboutInformations; }			
			set { _AboutInformations = value; RaiseEvent(); }
		}

        public void RaiseEvent() {

			if (AboutInformationChangedEvent != null) {

				AboutInformationChangedEvent.Invoke();

			}

		}

Leider ist mein AboutInformationChangedEvent immer null. Ich dachte mir immer, dass ich in diesem Fall nicht extra eine neue Instanz von dem Event erzeugen muss...

Bitte um einen kleinen Denkanstoß.

MFG

23.11.2007 - 13:52 Uhr

Stellt sich nur die Frage wie das da heißt. Könntest du mir da evtl. auf die Sprünge helfen?

    Win32_SoftwareElementAction   
    Win32_SoftwareElementCheck   
    Win32_SoftwareElementCondition   
    Win32_SoftwareElementResource   
    Win32_SoftwareFeature   
    Win32_SoftwareFeatureAction   
    Win32_SoftwareFeatureCheck   
    Win32_SoftwareFeatureParent   
    Win32_SoftwareFeatureSoftwareElements   

Diese lssen hätte ich gefunden. Da ist aber leider nichts brauchbares dabei...

MFG

23.11.2007 - 11:58 Uhr

Hallo,

ich brauche für mein Programm die Informationen die ich bekomme, wenn man in der Systemsteuerung - Software klickt, dann ein Programm auswählt und sich da dann die Supportinformationen anzeigen lässt.

Den Text von dem supportinformationen also.
Hat irgendwer eine Idee, wie ich an die ran komme? Mir fällt leider gar nichts ein. Ich hab schon in der Registry rumgesucht ob das da irgendwo drinn steht --> leider vergebens.

Vielen Dank im Vorraus

MFG

31.10.2007 - 10:29 Uhr

Och man... ich bin so ein Knallkopf. Das hätte mir auch einfallen können.

Danke für eure Antworten.

MFG

31.10.2007 - 10:12 Uhr

Hallo,

ich habe in einem DataGridView eine Splate wo Datum und Uhrzeit von dem UTC Format durch DateTime.Parte(myDateTime) in einen String umgewandelt steht. Nun liegt folgendes Vormat vor: "12.10.2007 11:53:42". Ich will nun, das als ToolTip diese UTC Zeit in unserer Zeit anzeigen.

Man könnte sich zwar einer mit String Splitterei rumspielen, normalerweis sollte das aber auch anders gehen.

Hab auch schon rum probiert und zwar denke ich mir, dass ich irgendwie diesen UTC string in ein DateTime umwandeln muss. Dann kann ich ja einfach mit ....AddHour() eine Stunde hinzufügen. Genau an der Umwandlung hapert es aber gewaltig.

Leider habe ich bisher noch keine andere Methode gefunden ein DateTime zu erstellen als mit DateTime.From...

Hier ist mein Code:


	TimeZone ConvertToLocalTime;

				string CellTimeAsString = 
						((string)logFileContentDataGridView.Rows[e.RowIndex].Cells[0].Value).Replace(':', ' ').Replace('.', ' ');

				CellTimeAsString = System.Text.RegularExpressions.Regex.Replace(CellTimeAsString, " ", "");

				long CellTime = Convert.ToInt64(CellTimeAsString);
				
				string UmgewandelteZeit = DateTime.FromBinary(CellTime).AddHours(1.00).ToString();

Hier bekomme ich aber völlig falsche Ergebnisse.

Bitte wenigstens um einen Denkanstoß.

Vielen Dank im Vorraus

MFG

25.10.2007 - 09:28 Uhr

Vielen Dank herbivore.

Jetzt wo ich es sehe ist es mir klar.

MFG

25.10.2007 - 08:50 Uhr

Hi,

bisher habe ich es so, dass der User nur aus sehr wenigen Farben auswählen kann.
Ich schreibe einfach ein paar Farben in ein string[]. Dieses Lasse ich dann in der Combobox anzeigen.

Wenn es dann so weit ist, dass ich auswerten muss was der User nun für eine Farbe gewählt hat, dann kommt ein Switch().... und so habe ich dann die Color.XXXX

Das ist halt schon irgendwie sehr umständlich, vor allem, wenn ich dem User irgend wann mal alle Farben zur Verfügung stelen möchte.


            string[] Colors = new string[10];
            Colors[0] = "Lavender";
            Colors[1] = "LightBlue";
            Colors[2] = "LightGreen";
            Colors[3] = "LightSalomon";
            ......



            foreach(string s in Colors) {

                startComboBox.Items.Add(Colors);
            
            }

            switch (SelectedColor) { 
            
                case Colors[0]:
                    SelectedColor = Color.Lavender;
                    break;
            
            }


MFG

25.10.2007 - 08:25 Uhr

Hallo,

ich probiere schon seit einer Weile rum. Ich will alle Farben also Color.XXXX in einer Liste speichern.

Was ich euch fragen wollte ist, ob es eine möglichkeit gibt, kurz und schnell einfach alle zu speichern. Bisher gehe ich mit einer Schleife über alle drüben und füge sie einer Liste hinzu.

Geht das auch auf einen Ruck?

MFG

23.10.2007 - 13:05 Uhr

Hi,

denke da wirst du Windows API verwenden müssen.

MFG

23.10.2007 - 10:46 Uhr

OK, OK sorry...

Ich will nun mit folgendem Code meine strings aus meiner CollectionKlasse in die DataTable schreiben. In der Hoffnung, dass ich dann die Daten in dem DataGridView sehe.


            //Die logFileContentDataTable mit Inhalten füllen
            foreach (LogFileContent currentContent in logFileInfo.LogFileContentCollection) {

                DataRow dr = logFileContentDataTable.NewRow();

                dr["Date / Time"] = currentContent.DateTime;
                dr["Time Zone"] = currentContent.TimeZone;
                dr["Log Type"] = currentContent.LogType;
                dr["Customer Name"] = currentContent.CustomerName;
                dr["Writing Component"] = currentContent.WritingComponent;
                dr["Message"] = currentContent.Message;


                //Hier tritt der Fehler auf.
                logFileContentDataGridView.Rows.Add(dr);

            }

Das Problem ist jetzt nur, dass er schreibt, dass man manuell keine neuen Zeilen erstellen kann wenn das DataGridView datengebunden ist.

Das kapier ich einfach nicht... Wie soll ich denn dann meiner Tabelle sagen, wo was in das DataGridView hingeschrieben werden soll?

Vielen Dank im Vorraus

MFG

23.10.2007 - 08:40 Uhr

Hallo,

mein Problem ist folgendes:

Ich habe ein DataGridView. Diesem habe ich über das DataSource Propertie eine eigene Collection Klasse angegeben.

Anfang´s sag das alles auch noch sehr gut aus, da das DataGridView sich selber die Spaltenüberschriften erstellt hat. Nur leider war´s das dann auch schon. Ich sehe den Inhalt meiner Collection leider nicht.

Da ich allgemein das DataBinding noch nicht so ganz verstanden habe wollte ich auch fragen, ob irgendwer evtl. ein gutes Tutorial weiß?

Korrigiert mich wenn ich falsch bin, aber es läuft doch im DataBinding so:

Ich habe eine DatenQuelle (Kann ne Dantenbank aber auch eine Textdatei sein). In meinem Fall ist es eine Textdatei. Diese lese ich aus, und speichere sie in meiner Collection Klasse.
Nun kann ich bei bestimmten Controls (z.B DataGridView) in den Properties in das DataSourcePropertie als DatenQuelle meine Collection klasse angeben.
Da diese durch klicks in eine ListView immer verändert wird, sollte ich doch dann den Inhalt von meiner Collection klasse in meinem DataGridView sehen.... oder?

MFG

19.10.2007 - 13:27 Uhr

Achso ist das.

Danke für deine Antwort. Jetzt funktioniert es auch.

MFG

19.10.2007 - 11:30 Uhr

Hi,

das habe ich ja auch schon probiert, dass ich ein FileInfo[] als Rückgabewert erwarte. Folgender Fehler:
Error 1 Cannot implicitly convert type 'System.Collections.Generic.List<System.IO.FileInfo>' to 'System.IO.FileInfo[]'

Meine Methode sieht dann logischerweise so aus:


 private FileInfo[] SearchForLogFiles(string path) {

            DirectoryInfo dir = new DirectoryInfo(path);

            System.Collections.Generic.List<FileInfo> LogFiles = new List<FileInfo>();

            foreach (DirectoryInfo subdir in dir.GetDirectories()) {
                
                LogFiles.AddRange(subdir.GetFiles("*.log"));

                SearchForLogFiles(subdir.FullName);
            }

            return LogFiles;

        }

Ich steh grad voll aufm Schlauch.

MFG

19.10.2007 - 11:25 Uhr

Hallo,

ich nutze folgende Methode, um alle Dateien aus allen Unterordnern eines Ordners in eine Liste zu packen. Diese FileInfo Liste würde ich dann gerne als Rückgabewert meiner Methode verwenden. Nur kommt hier der Fehler:

Error 1 Cannot implicitly convert type 'System.Collections.Generic.List<System.IO.FileInfo>' to 'System.IO.FileInfo'


        private FileInfo SearchForLogFiles(string path) {

            DirectoryInfo dir = new DirectoryInfo(path);

            System.Collections.Generic.List<FileInfo> LogFiles = new List<FileInfo>();

            foreach (DirectoryInfo subdir in dir.GetDirectories()) {
                
                LogFiles.AddRange(subdir.GetFiles("*.log"));

                SearchForLogFiles(subdir.FullName);
            }

            return LogFiles;

        }

Das verstehe ich irgendwie nicht.Ich mache mir doch eine FileInfo Liste in der Logischerweise nur FileInfo objekte liegen. Diese möchte ich dann zurückgeben.

Habt ihr eine Idee waum das nicht funktionieren soll?

Vielen Dank im Vorraus

MFG mipa_acc

18.10.2007 - 14:41 Uhr

Danke für deine Antwort!

Die DataTable ist aber leer. Ich würde da ja gerne irgendwie den Inhalt der Log Dateien in die DataTable holen. Das ist das was ich nicht weiß.

MFG

18.10.2007 - 14:37 Uhr

Hallo,

wie es mit einer Datenbank funktioniert weiß ich.

Mein Problem ist nur, dass ich ein Programm erstellen muss, welches mir Log Dateien von anderen Programmen ausließt. Die Log Dateien haben alle das selbe format.

Wie bekomme ich die log Dateien irgendwie in ein DataGridView indem ich DataBinding benutze. Das ist meine Frage.

Vielen Dank im Vorraus.

MFG

18.10.2007 - 14:11 Uhr

Hi,

eine Frage hab ich noch, und zwar wie bekomme ich die Table dann in den DataAdapter?


          //DataTable mit Inhalt füttern
                DataTable dt = new DataTable();

                dt.Columns.Add("Date/Time", typeof(string));
                dt.Columns.Add("TimeZone", typeof(string));

                DataRow dr = dt.NewRow();

                string[] LogDetail = new string[6];

                LogDetail = CurrentSplitt[0].Split('|');

                dr["Date/Time"] = LogDetail[0];
                dr["TimeZone"] = LogDetail[1];

                dt.Rows.Add(dr);

                DataSet ds = new DataSet("TestDataSet");

                //Ka warum das hier net geht
                ds.Load(........);

                DataAdapter da = new DataAdapter();
                da.Fill(ds);

Für s.Lead() brauche ich ja irgend eine Klasse die IDataReader hat. Hab ich aber leider nicht.

Oder denke ich hier falsch?

MFG

18.10.2007 - 13:59 Uhr

Hi Oxygen,

danke für deine Antwort!

Ich werde mir die Sache dann mal näher ansehen.

MFG

18.10.2007 - 13:49 Uhr

Hallo,

ich würde mir gerne selber eine DataTable erstellen. Leider hab ich keine Ahnugn, wie ich das anstellen soll.

Ich bin schon eine Weile am rumprobieren... leider ohne erfolg.


                DataTable DateTimeTable = new DataTable("Date/Time Table");

                DataRow row;
                row = DateTimeTable.NewRow();

Sache ich folgendes:
Ich habe eine *.log Datei welche ich gerne in eine DataTable einlesen würde. Die log Datei hat folgenden Aufbau:
2007-10-16T11:19:34.0220193Z | UTC | Information | <n.a.> | SCHD | Load scheduler [Check Endorsement Duration Scheduler]

Jetzt habe ich schon jeden Teil der Zwischen | ... | steht extrahiert. Nun würde ich mir gerne so eine DataTable zusammenbauen.

Geht das evtl. sogar einfacher?

Wenn ihr irgendwelche "Denkanstöße" hättet wäre ich euch dankbar.

MFG mipa_acc

12.10.2007 - 10:28 Uhr

Eha,

da hast du recht. Alles klar männer!

Ich danke euch recht sakrisch für eure Antworten.

MFG

12.10.2007 - 09:54 Uhr

@herbivore das verstehe ich nicht ganz, ich speichere ja mit myBitmap.Save(..) mein Bild. Da kann ich es doch nicht davor disposen, weil ich dann ja nicht mehr speicher kann.

MFG