Laden...

Forenbeiträge von Pacher Ingesamt 18 Beiträge

25.12.2023 - 06:20 Uhr

Hallo Abt, ok... na dann muss ich mich wohl damit vorerst mal abfinden. 
Aber vielen Dank für's testen und deine Antworten!
LG

22.12.2023 - 14:32 Uhr

Hallo Th69, ja leider, auch das hab ich schon probiert... ohne Erfolg. 
Dachte eigentlich, dass das Betriebssystem (Windows) erkennen sollte ob On oder Off des Druckers!
Aber Danke erstmal für deine Antwort.
LG

21.12.2023 - 18:04 Uhr

Hallo... versuche schon eine Weile ein eigentlich wohl banales Problem zu lösen, das mir aber schon graue Harre bereitet!

Möchte in meinem C# Programm vor dem Drucken prüfen, ob der Standard Netzwerkdrucker (WLAN) überhaupt eingeschaltet ist.

Hab schon so einiges aus dem Netz probiert, leider immer ohne Erfolg... egal ob on oder off, bekomme immer die gleichen Werte auf meinem System (Windows 11 und Epson ET-2820) retour.

Hat hier vielleicht jemand eine Lösung für mich?

Nachfolgend mein Versuchs Source:

static void PrintProps(ManagementObject o, string prop)
{
   try { Console.WriteLine(prop + "|" + o[prop]); }
   catch (Exception e) { Console.Write(e.ToString()); }
}

static void Main(string[] args)
{
   ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer where Default=True");

   foreach (ManagementObject printer in searcher.Get())
   {
       string printerName = printer["Name"].ToString().ToLower();
       Console.WriteLine("Printer :" + printerName);
       PrintProps(printer, "Caption");
       PrintProps(printer, "ExtendedPrinterStatus");
       PrintProps(printer, "Availability");
       PrintProps(printer, "Default");
       PrintProps(printer, "DetectedErrorState");
       PrintProps(printer, "ExtendedDetectedErrorState");
       PrintProps(printer, "ExtendedPrinterStatus");
       PrintProps(printer, "LastErrorCode");
       PrintProps(printer, "PrinterState");
       PrintProps(printer, "PrinterStatus");
       PrintProps(printer, "Status");
       PrintProps(printer, "WorkOffline");
       PrintProps(printer, "Local");
       Console.ReadKey();
   }
}
30.11.2021 - 12:03 Uhr

Hallo @Abt!
Oh vielen Dank für die ausführliche Antwort...beruhigt mich ungemein, dass ich wieder auf this.Close zurückkehren kann!
Wo hab ich das Dispose her, naja es gibt auf YouTube unzählige "Lehr-Videos" wo es so gehandhabt oder vorgeschlagen wird!
Es hat wohl jeder seinen eigenen Programmierstil...!

Nochmals Danke für die schnelle Antwort!
LG Pacher

30.11.2021 - 09:28 Uhr

Hallo!
Es wird ja öfters empfohlen eine Winform mit this.Dispose() zu schließen, damit alles aufgeräumt wird.
Es blitzt/flackert jedoch kurz unangenehm, das bei this.Close() nicht auftritt.
Meine Frage daher..., gibt es eine Möglichkeit beides unter einem Hut zu bringen oder wird das Dispose eh überbewertet?
Es gibt ja auch noch:


using(Form f = new Form())
{
     f.Show();
}

Wird auch hier alles "aufgeräumt"?
Sorry, aber mit Speicherverwaltung hab ich mich noch nicht näher beschäftigt...

LG Pacher

21.02.2021 - 23:04 Uhr

@Abt
Tut mir wirklich leid und entschuldige mich auch dafür, nicht gleich mit dem Wissen wie du hast, auf die Welt gekommen zu sein...

War das jetzt wirklich notwendig?
Genau diese Postings vermiesen es einem Anfänger, hier "dumme" Fragen zu stellen bzw. auf ein wenig Hilfestellung zu hoffen!!

21.02.2021 - 13:22 Uhr

Hallo @T-Virus!
Da hast mich falsch verstanden, bin über jeden Hinweis dankbar und hab das Beispiel auch mit den SQParameter nachgebaut, läuft natürlich auch bestens.
Vordringlich war mir aber einen Lösungsansatz bzgl. dem SQLString/Formatierung zu finden.... geb da bei einem Problem nicht so schnell auf!

Hab mich auch heute schon mit dem SQLite Thema beschäftigt, dass ich so nicht kannte - der erste Eindruck gefällt mir wirklich gut, da es meinen Anforderung
an möglichst Portabel und keine "Server" Konfiguration, dem einer Access Datenbank entspricht. Syntax ist ja eh sehr ähnlich.

Bzgl. Access hatte ich bisher kaum Probleme, vorausgesetzt das "Microsoft Access Database Engine 2010 Redistributable" wurde beim Anwender installiert!
Finde die Tabellenerstellung schon wesentlich einfacher, aber wie man es eben gelernt oder gewöhnt ist!
Schön jetzt eine ev. bessere Alternative zu kennen, bin eh für "open your mind"...

Also besten Dank
LG

21.02.2021 - 09:22 Uhr

Hallo und ein herzliches Dankeschön euch beiden für die profesionellen Antworten.
Wie gesagt ich befinde mich noch im Anfängerstadium und muss mich erst von unten nach oben arbeiten um alles zu verstehen.
Der Hinweis auf SqlParameter war für mich schon mal ein zielführender Hinweis, alles andere ist für mich noch mit Kanonen auf Spatzen schießen bzw.
muss ich mich erst heranarbeiten. Von Drei-Schichten-Architektur bin ich noch weit entfernt und muss man auch mal erst verstehen....

Beschäftige mich derzeit noch mit kleineren Anwendungen (Adress-, Vereinsverwaltung etc.) da finde ich, ist eine Access "Datenbank" vollkommen ausreichend und
im Privatbereich möchte sich nicht gleich jeder mit Server und deren Konfiguration beschäftigen!
Hier hab ich eine '.exe und eine *.accdb und gut iss es.
Es ging mir darum, eine Lösung zu finden dieses Beispiel auch im deutschsprachigen Raum unkompliziert und ohne viel Aufwand lauffähig zu bekommen.
Und ja viele Wege führen nach Rom...

Mittlerweile hab ich eine Lösung gefunden, auch wenn ich den SQL String ziemlich "vergewaltigen" musste. Finde das DateTimePicker.Value als das eigentliche Problem, mit wenig Aufwand umgeschrieben, funtioniert es auch tadellos.
Alles weitere wie mit dem SQL Injection muss ich mich noch hineinarbeiten!

Hier meine kurzfristige Lösung:

var dtp1 = this.DateTimePickerFrom.Value;
var dtp2 = this.DateTimePickerTo.Value;
sql = "Select * from tblUser where EntryDate ≥ #" + dtp1.Year + "/" + dtp1.Month + "/" + dtp1.Day + "# and EntryDate ≤ #" + dtp2.Year + "/" + dtp2.Month + "/" + dtp2.Day + "#";

Aber nochmals vielen Dank für die Hinweise, werde mich damit beschäftigen!
LG Pacher

20.02.2021 - 12:04 Uhr

Hallo!
Beisse mir hier an einem simplen Beispielprogramm schon seit Stunden die Zähne und finde einfach den Fehler nicht!
Habe schon zig Format Varianten durchprobiert, aber scheitere immer wieder an Datentypenkonflikten...
Vieleicht mag jemand mal kurz drüber schauen bzw. mir den entscheidenden Tipp geben und... bitte nicht prügeln, befinde mich noch im Anfängerstadium!
Wie auch aus dem Sourcecode erkennbar - C# und Access Database!
(Ja es gibt eine Unmenge an Videos und Tipps im Web, aber all diese sind mit unserem "Deutschen" System nicht lauffähig.)

Vorab schon Mal eine kleines Dankeschön!
LG

16.02.2017 - 18:39 Uhr

Leider bin ich mit dem Debugger noch nicht so auf du und du!! 😉

Dafür gibt es ja den von p!lle verlinkten Artikel. Wie willst du denn Programme schreiben, wenn du den Code nicht debuggen kannst?

Deshalb hab ich ja auch geschrieben "noch nicht....", verdiene mit C# ja nicht meine Brötchen, daher möge man es mir nachsehen das ich VS 2015 nicht im FF beherrsche...
sonst hätt ich mir ja auch die Frage erspart!!

Solche Lehrmeistersprüche sind ja nicht unbedingt sehr motivierend...., aber trotzdem Danke an alle hier für die Hinweise,
besonders an @Khalid!

Hab's für mich jetzt auch gelöst...


        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if ((e.Control & e.Shift) && e.KeyCode == Keys.Oem102)
            {
                MessageBox.Show("Ctrl + Shift + >");
            }
            else if ((e.Control) && e.KeyCode == Keys.OemBackslash)
            {
                MessageBox.Show("Ctrl + <");
            }
        }


LG Pacher

16.02.2017 - 16:06 Uhr

das müsste Keys.OemBackslash sein.

Hallo @Khalid!

Ja perfekt, Keys.OemBackslash ist das >
kennst aber auch noch das Äquivalent,
also für das "<" ?

Leider bin ich mit dem Debugger noch nicht so auf du und du!! 😉

Schon mal ein Danke!
LG PACHER

16.02.2017 - 15:29 Uhr

Hallo!

Nach 3 Stunden erfolgloser Internet Recherche, habe ich die Hoffnung das mir hier jemand zum Erfolg helfen kann!

In meinem Winforms Programm werte ich mit nachfolgendem Code per KeyDown Ereignis bestimmte Tastatureingaben aus und entsprechende Aktionen werden ausgeführt.
Alles funktionert auch tadellos, nur bei bestimmter Shortcut Funktion hänge ich, da ich nirgends die entsprechen "Keys" finde.

Die Tastaturkombination lautet:
"STRG + UMSCHALT + >" also das größer als Zeichen
sowie
"STRG + <" also das kleiner als Zeichen

Mein Code:


        private void frmMain_KeyDown(object sender, KeyEventArgs e)
        {
			if ((e.Control & e.Shift) && e.KeyCode == Keys.C)
			{
				MessageBox.Show("Ctrl+Shift+C gedrückt");
			}
			else if (e.KeyCode == Keys.Escape)
			{
				MessageBox.Show("ESC gedrückt");
			}
			else if (e.Control && e.KeyCode == Keys.N)
			{
				MessageBox.Show("Ctrl+N gedrückt");
			}
			else if (e.Control && e.KeyCode == Keys.??????) // wie lautet der Keys für das ">"
			{
				MessageBox.Show("Ctrl+> gedrückt");
			}
        } 

Wäre für jeden Tipp dankbar!
LG Pacher

20.11.2016 - 11:26 Uhr

Nur als kleiner Hinweis - das Verändern der Prüfregeln macht die schlechte Benamung nicht besser...

Hallo!
Na dann sollte sich Microsoft erst mal selbst an die eigene "Namensvorschrift" halten!!
Zieh mal in VS 2017 RC einen Button in ein Formular, dann heißt der "button1", statt der richtigen Benennung "Button1" - gemäß, der erste Buchstabe muss mit einem Großbuchstaben beginnen!!

Ich habe vor vielen vielen Jahren mit Visual Basic 2.0 begonnen und da hat es sehr wohl einen Coding Style gegeben (siehe oben) und den habe ich mir bis jetzt behalten.
Klar bleibt die Zeit nicht stehen, aber solange man damit keine Schlüsselwörter verletzt, also why not!? Bin alleine und in keinem Team!

Selbst bei MS konnte ich keine klare Empfehlung zur Benennung z. B. von Steuerelementen finden, jeder wird seinen eigenen Stil sich angeeignet haben, mit dem er am besten klar kommt. Ein wirkliches RICHTIG oder FALSCH gibt es beim coden nicht und wenn dann bitte vor den Vorhang mit seinem Coding Style.

17.11.2016 - 18:04 Uhr

du kannst dir ja selbst ein Ruleset erstellen, gegen das geprüft wird.

Danke Gü, das war der entscheidende Hinweis!!

LG Pacher

17.11.2016 - 10:11 Uhr

Hallo!
Bin jetzt gerade leider nicht vor meinem Schirm um es zu testen, ab er du meinst man kann die Restriktion in FxCop abschalten/einstellen?

17.11.2016 - 09:16 Uhr

Hallo!
Habe mir gerade das aktuelle VS 2017 RC installiert und bin gerade etwas schockiert....!!
Meine "alten" Winforms Projekte sind damit nicht mehr lauffähig, da die "Benennungsregel" es verbieten...??!!

Ich greife auf meine Steuerelemente nach "alten" Empfehlungen zu, z.B.:
frmMain
frmSettings
frmAbout
btnOK
btnCancel
txtVorname
txtStrasse
etc.

Hab ich da einen Schalter übersehen, damit ich die Projekte weiterpflegen kann, muss ich alle mühselig umbenennen oder muss ich bei VS 2015 bleiben?
Der Arbeitsaufwand wäre ja tw. ein Wahnsinn!!

Vielleicht hat jemand einen Tipp?

LG
Pacher

18.02.2015 - 08:59 Uhr

Hallo, @Torni und @Coffebean!

Danke für die Antworten. Beide Methoden hatte ich natürlich schon getestet und leeren auch die ListView von den Items.
Das Problem liegt eher an der „Bindung“ ListView – ImagList!
Sobald einmal eine Zuweisung erfolgt, bekomm ich die nicht mehr aus der ListView raus und es bleibt ein 16x16 „Platzhalter“ (siehe Bild 3).
Kann man die ListView ev. irgendwie „neu Initialisieren“, ohne die Anwendung neu zu starten?

17.02.2015 - 19:59 Uhr

Hallo!
Bevor ich mir noch die Stirn mit meinem Problem blutig schlage, hoffe ich hier den entscheidenden Tipp oder Lösung zu erhalten.
Lade mir in einer Listview hauptsächlich Picture-Files und hole mir per SHGetFileInfo-Funktion das jeweilige File-Symbol mit Hilfe einer ImageList - das funktioniert auch tadellos.
Aaaber, würde gerne zur Laufzeit die Möglichkeit haben, die ListView entweder MIT oder OHNE die Symbole umzuschalten. Sollte eigentlich ganz einfach sein, ListView leeren und entsprechend neu zu füllen.
Funktioniert auch wie gewünscht, wenn ich beim Start der Anwendung die ListView OHNE Symbole lade und dann während der Laufzeit dies neu und MIT Symbolen fülle, aber leider dann nicht mehr umgekehrt, also OHNE Symbole. Es wird zwar das Symbol nicht mehr angezeigt, es wird aber der Dateiname nicht mehr linksbündig gesetzt.
Für mich hat es den Anschein, dass die ImageList nicht vollständig geleert, gelöscht oder entfernt wird. Habe schon alle „mir“ bekannten Möglichkeiten probiert, nichts hilft, erst wieder ein Neustart.
Habe versucht dies in einem minimal-Programm (siehe Code), dies zu verdeutlichen. Wie gesagt, Problempunkt ist in Schritt 3 – siehe auch meine ausdokumentierten, vergeblichen Versuche.
Bin eher Beginner, vielleicht liegt es auch an der SHGetFileInfo-Funktion?? Wäre um jede Hilfe wirklich dankbar!
Sorry auch für den Roman, nur wie erklär ich sowas halbwegs verständlich…!

//.................	
		// Schritt 1. (kein Problem)
		void MainFormLoad(object sender, EventArgs e)
		{
            string strFileName = @"C:\Info.ico";
			listView1.View = View.Details;
		    listView1.Items.Add(strFileName);
		}
		
		//Schritt 2. (kein Problem)
		void Button1Click(object sender, EventArgs e)
		{
            string strFileName = @"C:\Info.ico";
            IntPtr hImgSmall;
            SHFILEINFO shinfo = new SHFILEINFO();            
            listView1.SmallImageList = imageList1;
            hImgSmall = Win32.SHGetFileInfo(strFileName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_ICON | Win32.SHGFI_SMALLICON);
            Icon myIcon = (Icon)Icon.FromHandle(shinfo.hIcon).Clone(); 
            Win32.DestroyIcon(shinfo.hIcon);

            imageList1.Images.Add(myIcon);
            listView1.Items.Add(strFileName, nIndex++);
		}
		
		//Schritt 3. (Problema...ImageList wird nicht geleert!!)
		void Button2Click(object sender, EventArgs e)
		{
            string strFileName = @"C:\Info.ico";
            //imageList1.Images.Clear();			
            //imageList1 = null;	
            //imageList1.Dispose();		
            //listView1.SmallImageList = null;
            //listView1.StateImageList = null;           
            //listView1.Columns.RemoveAt(0);
            //listView1.Clear();
            //listView1.Items.Clear();
            //listView1.Refresh();

			listView1.View = View.Details;
		    listView1.Items.Add(strFileName);
		}