Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von _Bugrick_
Thema: Intersect zwischen zwei Listen bestehend aus Flags
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hey Th69,

danke für deine Antwort.

Das geht tatsächlich, wenn man die Listen vor dem Vergleich sortiert, sonst nimmt die Methode den ersten Treffer und hebelt unter Umständen andere potentielle Matches aus, wie es hier passieren würde:


List<Waehrung> lstPreis = new List<Waehrung>();
lstPreis.Add(Waehrung.Silber);
lstPreis.Add(Waehrung.Gold);

List<Waehrung> lstKonto = new List<Waehrung>();
lstKonto.Add(Waehrung.Silber | Waehrung.Gold);
lstKonto.Add(Waehrung.Silber);

Außerdem muss die GetHashCode-Methode im eigenen EqualityComparer immer einen konstanten Wert zurückgeben, sonst springt man nie ins Equals um auf die Flags zu prüfen.

Ich hoffe ich kann so erst einmal fahren, danke!

Thema: Intersect zwischen zwei Listen bestehend aus Flags
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen,

ich habe zwei Listen und möchte feststellen können, ob die eine Liste die andere abdeckt. Einer der Listen besteht jedoch aus Flags. Offenbar kommt die Intersect-Linq-Funktion damit nicht klar, denn ich erhalte im Beispiel hier unten das Ergebnis, dass nur einer der Werte in der anderen Liste enthalten ist:


[Flags]
public enum Waehrung
{
  Silber = 1,
  Gold = 2,
  Platin = 4
}

List<Waehrung> lstPreis = new List<Waehrung>();
lstPreis.Add(Waehrung.Gold);
lstPreis.Add(Waehrung.Gold);

List<Waehrung> lstKonto = new List<Waehrung>();
lstKonto.Add(Waehrung.Silber | Waehrung.Gold);
 lstKonto.Add(Waehrung.Gold);

List<Waehrung> lstBezahlbar = lstKonto.Intersect(lstPreis).ToList();

Meine Frage ist nun, ob es dennoch eine elegante und einfache Lösung gibt oder ob ich selbst eine Prüfroutine schreiben muss.

Wäre für Hinweise sehr dankbar!

Thema: AutoScroll-Property des Panels hebelt SuspendLayout/ResumeLayout aus
Am im Forum: GUI: Windows-Forms

Vielleicht fehlt doch noch etwas Kontext.

Die blaue Fläche ist das ganze UserControl etwas verkleinert.
Beim Laden des Controls sieht man schon kurz (für den Bruchteil einer Sekunde) die Scrollbar, bevor sie sich final sauber rechts positioniert, zusammen mit dem Rest des UserControls.
Übrigens findet alles in der GUI-Thread statt. Nichts Threadübergreifendes.

Eben eine Gegenprobe gemacht: Nutzt man beispielsweise das "UltraPanel" der Infragistics-Softwarekomponenten klappt das ganze ebenfalls problemlos, ohne, dass man beim Aufbau des UserControls kurz die Scrollbar mitten ins Nichts eingeblendet bekommt.

Thema: AutoScroll-Property des Panels hebelt SuspendLayout/ResumeLayout aus
Am im Forum: GUI: Windows-Forms

Hallo zusammen,

ich arbeite an einem umfangreichen UserControl, das dynamisch eine Oberfläche mit ziemlich vielen Controls aufbaut.

Im Grunde funktioniert auch alles einwandfrei, bis auf einen ziemlich nervigen Schönheitsfehler.

Damit sich das UserControl sauber ohne Flackern aufbaut und dann eingeblendet wird, arbeite ich mit


this.SuspendLayout();
this.ResumeLayout();

Das funktioniert auch bei allen Controls wunderbar, bis auf einem einzigen. Nämlich einem Panel. Und auch nur dann nicht, wenn ich die AutoScroll-Property auf true setze. Kommentier ich diese Zeile aus, baut sich alles sauber auf. Sobald ich die Zeile rein nehme, ist kurz folgendes zu sehen (sh. Anhang 1).

Ist das ein Bug im .NET-Framework oder mache ich etwas falsch?

Was ich schon probiert habe ist:
- Autoscroll an verschiedenen anderen Stelle zu setzen, auch nach ResumeLayout
- Ebenfalls mit SuspendLayout and ResumeLayout für das Panel zu arbeiten


//Panels um scrollen zu können
//pnl[a].AutoScroll = true;
pnl[a].Controls.Add(tlp[a]);                   
pnl[a].Dock = DockStyle.Fill;
pnl[a].Location = new Point(0, 0);
pnl[a].Name = string.Concat("pnl", a.ToString());
pnl[a].Size = new Size(100, 100);
//pnl[a].AutoScroll = true;

Bin für jede Hilfe dankbar.

Gruß
_Bugrick_

Thema: 7-Segmentanzeige und Uhrzeitenanzeige
Am im Forum: .NET-Komponenten und C#-Snippets

Hallo,

freue mich sehr über das gute Feedback.

Padman, ich werde versuchen es zeitlich hinzubekommen und bald eine Demo bereitzustellen, die sich mit VS2015 öffnen lässt.

Thema: Performanceoptimierung beim rekursiven durchlaufen einer Form
Am im Forum: GUI: Windows-Forms

War ja klar. Hat sich doch ein Datenbankzugriff in der Methode versteckt, die übersetzt. Und nicht gerade ein schöner. Auf einen Server, der am anderen Ende der Welt steht macht sich das deutlich bemerkbar. Bin optimistisch, dass es nach dem umbauen dann schneller klappt.

Danke nochmal an alle!

Thema: Performanceoptimierung beim rekursiven durchlaufen einer Form
Am im Forum: GUI: Windows-Forms

Zitat von MrSparkle
solche Probleme könnte man bereits im Vorfeld dadurch umgehen, indem man seine Software-Architektur sorgfältig plant und die einzelnen Schichten trennt.

Das tu ich doch: GUI --> Dictionary<string value, string key> --> Datebank
Zitat von steffen_dec
Du benutzt TableLayoutPanel mit Spalten die automatisch vergrößert werden? evtl. ist hier das Problem da bei jedem Resize von einem Control die Spalten neu angepasst werden. Wenn es wirklich so ist dann teste mal mit SuspendLayout/ResumeLayout von dem TableLayoutPanel.

Die Spalten vom TLP sind alle mit Prozentwerten belegt, die Änderung des Textes hat keinen Einfluss auf die Größe der Controls, die darin liegen.
Wenn ihr aber alle meint, dass das theoretisch gehen muss, hab ich irgendwo anders noch einen Performancefresser. Sobald ich weiß wo, sag ich Bescheid.

Trotzdem danke!

Thema: Performanceoptimierung beim rekursiven durchlaufen einer Form
Am im Forum: GUI: Windows-Forms

Vielen Dank für deine Antwort!

Zitat von trib
Wenn Du jedes Mal die gesamte Übersetzung in einem Rutsch lädst, verwende doch einen SplashScreen. Hast Du die Übersetzungen beisammen, übergibst Du diese der Haupt-Form und rufst anschließend Show() auf.

Splashcreen, so nennt man das also :) Den Gedanken hatte ich auch schon und hab das bereits ausprobiert. Auch dieser hängt, sobald es in den rekursiven Aufruf geht.
Hab nach jedem SQL-Zugriff einen Haken im Splashscreen gesetzt. Alles ging wundbar, bis dann die eigentliche Form gebaut und übersetzt wird... da hing alles.
Zitat von trib
Der Vorteil eines SplashScreens ist, dass dieser i.d.R. in einem anderen Thread läuft und somit die Ladeanimation unabhängig Deiner Datenbankanfrage aktualisieren kann.

Das hast du missverstanden. Die Datenbankabfrage läuft sowieso in einem anderen Thread.
Die GUI hängt erst, wenn wirklich das Zugreifen auf die Steuerelemente beginnt.
Genau darin besteht ja die ganze Zeit mein Problem. Datenbankabfragen kann ich so viele machen wie ich will, ohne die GUI zu beeinträchtigen.

Thema: Performanceoptimierung beim rekursiven durchlaufen einer Form
Am im Forum: GUI: Windows-Forms

Zitat von vbprogger
klingt für mich nach [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)

Bin ja nur im GUI-Thread unterwegs beim Übersetzen, muss ich ja auch.
Zitat von Abt
Für mich klingt das eher nach einer falschen handhabe, wie eine Lokalisierung der Anwendung vollzogen wird.
Wieso nutzt ihr nicht Ressourcen für die Sprachumstellung von Anwendungen, wozu es auch gedacht ist?
Walkthrough: Localizing Windows Forms

Danke! Das klingt interessant, probier ich direkt mal aus. Wirklich einsetzen werde ich das aber auf die Schnelle nicht oder nie können, da wir unsere Übersetzungen zentral auf einer Datenbank einpflegen und beim Programmstart laden.

Thema: Performanceoptimierung beim rekursiven durchlaufen einer Form
Am im Forum: GUI: Windows-Forms

Hallo zusamen,

ich suche aktuell einen Weg die GUI am Leben zu erhalten, während sie rekursiv durchlaufen und übersetzt wird.

Habe während des Programmstarts ein Preloader.gif in einer Picturebox am laufen, um zu sehen ob die GUI hängt. Während im Hintergrund Datenbankzugriffe laufen, ist das alles kein Problem. Sobald es dann aber ans übersetzen der Controls geht, friert alles ein.

Habe bereits mit Suspendlayout/Resumelayout/DoubleBuffered herumgespielt, jedoch hat das wenig bis nichts geholfen. Es liegt definitiv am Übersetzen, denn wenn ich das nicht aufrufe, ist die GUI voll da.
Das Übersetzen erfolgt ganz schlicht über Rekursion und einem Dictionary.

Hat von euch jemand eine Idee, wie man das am besten angeht?
Zu erwähnen sei vll noch, dass ich hier nicht von 2-3 Button und einem Label spreche, sondern von ca. 60-70 Controls, die auch noch auf einem TableLayoutPanel liegen.

Gruß
_Bugrick_

Thema: [erledigt] Xml-String bauen OHNE eine Xml-Datei zu erzeugen
Am im Forum: Datentechnologien

Sorry, dass ich mich erst jetzt wieder melde. Danke für alle eure Antworten.

LINQ, schön wärs. Leider muss ich noch mit VS2005 und Framework 2.0 arbeiten :-(
Ich habe mich dann letzten Endes dazu entschlossen das XML manuell zu erzeugen.

Thema kann von meiner Seite her geschlossen werden.

Thema: [erledigt] Xml-String bauen OHNE eine Xml-Datei zu erzeugen
Am im Forum: Datentechnologien

Hallo zusammen,

seit einigen Tagen bin ich auf der Suche nach einer Möglichkeit einen einfachen Xml-String zu erstellen, ohne dabei eine Datei erzeugen/speichern zu müssen. Hat den einfachen Grund, dass das xml per TCP-Nachricht versendet werden soll.

Normal mache ich das immer mit XmlDocument, was in diesem Fall ja nicht geht. Dann hatte ich viel Hoffnung in den XmlTextWriter gelegt (klingt ja nicht nach Datei) aber auch dieser verlangt einen Pfad/Stream.

Kennt jemand eine Klasse/Möglichkeit mit einfachen mitteln Knoten und Attribute zu setzen und am ende einen Xml-String haben? Lustigerweise kann man mit der XmlDocument-Klasse einen Xml-String setzen und diesen auslesen ohne eine Datei zu haben, aber umgekehrt offenbar nicht. Notfalls werde ich das Xml händisch basteln müssen :-/

Hier noch ein einfaches Beispiel wie es am Ende aussehen muss, wie gesagt, sehr simpel:

<input type="Test"><a>1</a><b>2</b><c>3</c></input>

Vielen Dank schon mal!

Thema: Klasse im eigenen Konstruktor neu initialisieren
Am im Forum: Rund um die Programmierung

So werde ich es auch lösen, da ich keine Möglichkeit gefunden habe die ganze Logik sauber unterzukriegen. Danke!

Thema: Klasse im eigenen Konstruktor neu initialisieren
Am im Forum: Rund um die Programmierung

Das hier könnte Tatsächlich so funktionieren:

public Test(string str) : this(int.Parse(str.Split(',')[0]), int.Parse(str.Split(',')[1]))
{
}

Problem ist, dass ich noch sehr viel Logik habe, die ich aus dem String raus ziehe, beispielsweise falls ungültige Zeichen drin sind. Aber ich seh mir mal an wie sich das alles verhält und melde mich.

Danke für die schnelle Antwort schon mal.

Thema: Klasse im eigenen Konstruktor neu initialisieren
Am im Forum: Rund um die Programmierung

Hallo,

ich möchte wie unten im Code-Snippet ersichtlich einem Konstruktor einen String übergeben, der zwei Zahlen enthält. Und dort sollen die beiden Zahlen dann einem anderen Konstruktor übergeben werden. Nur wenn ich das mach, dann bekomm ich Schwierigkeiten "this" zu setzen. Nun meine Frage, gibt es da einen Trick oder muss ich hier eine statische Methode erfinden, die dann erst eine Instanz der Klasse erzeugt und zurückgibt? So z. B.:

Test tst = Test.CreateInstance("12,49");

Hier das Snippet:

public class Test
	{
		public Test(string str)
		{
			//Aufbau vom String: Zahl1,Zahl2
			//Beispiel: 12,49

			string[] strParts = str.Split(',');

			Test tst = new Test(int.Parse(strParts[0]), int.Parse(strParts[1]));
			this = tst;

			//oder
			//this tst = new Test(int.Parse(strParts[0]), int.Parse(strParts[1]));
		}

		public Test(int int1, int int2)
		{
			//Rechne etwas
		}
	}

Danke schonmal für eure Hilfe!

Gruß
_Bugrick_

Thema: Globale Key-Events
Am im Forum: GUI: Windows-Forms

Hallo,

gibt es ein Even oder eine Methode (die man mit einem Timer steuern könnte), die zurückgibt, welche Taste soeben gedrückt wurde?

Ich hab bereits gegooglet aber nichts vernünftiges finden können. Das meiste hat sich auf Forms bezogen. Ich jedoch suche etwas globales, also das überall in Windows geschossen wird.

Ich würde gerne mitzählen, wie viele Tastenanschläge man pro Tag macht (evlt auch mit Statistiken).

Danke schon mal!

Thema: Datagrid in einer Form über eine Methode aus einer Klasse befüllen
Am im Forum: GUI: Windows-Forms

Ok, war schon spät und ich hab nicht weiter darüber nachgedacht. Da hast du natürlich recht.

Thema: Datagrid in einer Form über eine Methode aus einer Klasse befüllen
Am im Forum: GUI: Windows-Forms

Hallo,

das sind Grundlagen. Erkundige dich bitte das nächste mal selbst.

public class clsOwn
{
   public clsOwn()
   {
      DataTable dt = new DataTable();

      new frmMain(dt);
   }
}


public class frmMain : Form
{
   public frmMain(DataTable dt)
   {
      dgv.DataSource = dt;
   }
}

Thema: Programm neu starten [eigentlich: neuen Durchlauf beginnen]
Am im Forum: Rund um die Programmierung

Hallo,

da ist nichts zu erkennen, weshalb das Programm 8 mal neustartet. Hast du das vielleicht in einer Schleife drin und versehentliche eine Klammer falsch gesetzt? Kannst du mal mehr Code posten?

Gruß
_Bugrick_

Thema: Vorbelegung der Hintergrundfarbe im Kalender.
Am im Forum: GUI: Windows-Forms

Hi,

ich kenne das Event zwar nicht, aber vielleicht hilft dir das weiter: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.calendar.dayrender.aspx

Gruß
_Bugrick_

Thema: Bestimmte Werte einer Spalte ersetzen
Am im Forum: Datentechnologien

Danke schonmal für die Antworten! :-)

Auf DLookUp bin ich bereits gestoßen, finde aber das ist auch nicht so das gelbe vom Ei. Habe gelesen, dass das recht langsam werden kann.

Habe es jetzt so gelöst, dass ich 2 Statements habe, ein SELECT, das den Wert fürs SET holt und dann ein UPDATE mit Subselect im WHERE.

Wäre trotzdem froh, wenn es eine Möglichkeit gäbe das in einem schnellen, sauberen Update-Statement zu machen.

Thema: Bestimmte Werte einer Spalte ersetzen
Am im Forum: Datentechnologien

Eben mal getest und wie erwartet geht es auch bei mehrmaligem probieren nicht. Dieser "SET g.besitzer_id = (SELECT..." mag zwar bei anderen DB-Systemen funktionieren, aber nicht bei MS Access. Da bekomme ich immer die OleDbException "Operation muss eine aktualisierbare Abfrage verwenden."
Hab es auch schon mit "TOP 1" probiert, Sub-Select ist hier wohl nicht...

Thema: Bestimmte Werte einer Spalte ersetzen
Am im Forum: Datentechnologien

Verwendetes Datenbanksystem: MS Access 2007 (OleDb C#, VS2005, .NET FX 2.0)

Hallo,

ich habe eine Tabelle mit Besitzern und eine mit Grundstücken, ein Besitzer kann im Moment gar keine oder mehrere Grundstücke besitzen.

TabBesitzer

ID Besitzer
-----------
1 Hubert
2 Meier
3 Schmidt
4 Müller



TabGrundstuecke

ID Besitzer_ID Grundstueck
--------------------------
1 1 Grundstück1
2 1 Grundstück2
3 3 Grundstück3
4 3 Grundstück4
5 3 Grundstück5
6 4 Grundstück6



Nun will ich ein UPDATE-Statement erstellen, dass alle Grundstücke eines Besitzer an einen anderen überträgt und zwar anhand der Namen. Ich will dem Statement nur die Namen übergeben müssen. Ich habe beim googlen einen Aufbau gefunden, der das angeblich für MS Access kann, jedoch funktioniert auch dieser bei mir nicht, ich erkenne jedoch auch keinen Fehler:


UPDATE TabGrundstuecke g INNER JOIN TabBesitzer b ON b.besitzer = 'Meier' SET g.besitzer_id = b.id WHERE besitzer_id = (SELECT b.id FROM TabBesitzer b WHERE b.besitzer = 'Schmidt')

Was zwar einfach wäre, aber nicht geht ist ...SET g.besitzer_id = (SELECT b.id FROM...) weil ein eindeutiger Wert erwartet wird. Scheidet also wohl leider aus...

Danke schon mal!

Thema: Mehrere ToolStripMenuItems klicken ohne es auszublenden
Am im Forum: GUI: Windows-Forms

Und eben ist noch ein weiteres Problem aufgetaucht: Mit AutoClose geht das ja dann gar nicht mehr weg :-( Also muss doch ein Event erzeugt werden.

Thema: Mehrere ToolStripMenuItems klicken ohne es auszublenden
Am im Forum: GUI: Windows-Forms

Achso, na wenn man die DropDown-Eigenschaft erstmal kennt, wird so einiges klar.

Dann ist sogar

ParentMenu.DropDown.AutoClose = false;

der wohl noch einfachere Weg. Danke dir, hat mir sehr geholfen! :-)

Thema: Mehrere ToolStripMenuItems klicken ohne es auszublenden
Am im Forum: GUI: Windows-Forms

Hallo,

ich würde gerne bei einem ToolStripMenu mehrere Items anklicken, ohne, dass das Menü direkt wieder ausgeblendet wird, nachdem ich eines angeklickt hab.

In meinem Fall soll die Checked-Eigenschaft immer geändert werden, und das unter umständen von mehreren Items. Nur ist das nervig, wenn man das Menü immer wieder herholen muss.

Ich habe leider nur weder eine Property, noch sonst irgendwas im Netz gefunden, um das einzustellen. Weiß hier jemand einen Rat?

Danke schomal!

Thema: string.Trim() arbeitet nicht wie erwartet / Zählen, wieviele verschiedene Zeichen ein String enthält
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich ging davon aus, dass die Trim-Funktion aufeinmal alle gleichen Zeichen entfernt (sollte sie ja, oder?). Und die Anzahl der Durchgänge die die for-Schleife braucht, ist die Anzahl der verschiedenen Buchstaben.

Thema: string.Trim() arbeitet nicht wie erwartet / Zählen, wieviele verschiedene Zeichen ein String enthält
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

wie ich feststellen durfte gibt es keine vorgefertigte Funktion, die zählt wie viele verschiedene Zeichen ein String enthält. Also fix eine runtergetippt:

private int GetNumberOfVariousChars(string strValue)
{
   int intCount;

   for (intCount = 0; strValue.Length > 0; intCount++)
   {
      strValue = strValue.Trim(strValue[0]);
   }

   return intCount;
}

Soweit, so gut. Beim Debuggen durfte ich nun festellen, dass Trim manchmal nicht korrekt vorgeht. Beispiel: Beim Wort "nennen" sollte die Funktion "2" zurückgeben. Jedoch gibt sie "3" zurück, da zuerst das erste "n" getrimmt wird, anschließend die beiden "e" und "n". Das selbe ist beim Wort "elefant" der Fall.

Nutz ich die Funktion falsch oder wie?

Danke schonmal.

Thema: Event auslösen, wenn ein neuer Bildschirm an- oder abgesteckt wird
Am im Forum: Rund um die Programmierung

Ich habe jetzt eine Möglichkeit gefunden:

SystemEvents.DisplaySettingsChanging += new EventHandler(SystemEvents_DisplaySettingsChanging);

Ist nicht direkt das, wonach ich gesucht habe, sondern sogar noch etwas besser :-)
Und beim ändern der Bildschirmanzahl wird auch (logischerweise) dieses Event ausgelöst. (Zumindest unter Windows 7 Enterprise, wo anders habe ich es jetzt nicht getestet)

Trotzdem danke tom-essen.

Gruß
_Bugrick_

Thema: Event auslösen, wenn ein neuer Bildschirm an- oder abgesteckt wird
Am im Forum: Rund um die Programmierung

Wieso das?

Dass man ein Notebook im laufenden Betrieb aus einem Port-Replicator rausnimmt oder einsteckt ist ja jetzt kein Unding. Habe auch noch nie gehört, dass dabei mal was kaputt gegangen ist. Was jetzt nicht heißen soll, dass ich mich nicht vom Gegenteil überzeugen lassen würde ;-)

Unabhängig davon, ob es jetzt gut oder schlecht ist, besteht mein Problem ja trotzdem noch.