Hallo,
guck mal auf den Link: [FAQ] Eigenen Event definieren / Information zu Events
Wenn du das Event auslöst dann kannst du den Sender mitgeben (meistens this).
Und genau dieses object sender, kriegst du dann auch in der GUI raus, wenn du das Event abfängst.
Du kannst aber auch in das EventArgs zusätzlich Daten packen, falls das nötig ist.
Gruß
Michael
Hallo jogisarge,
wie kann ich jetzt in der GUI erkennen, zu welchen Textboxen der Thread gehört ?
Wie herbivore schon gesagt hat kannst du das herausfinden indem du den sender verwendest.
D.h. der Thread gibt zurück zu welcher Textbox er gehört.
Natürlich sollte das getrennt sein (der Thread kennt die TextBox nicht) dann musst du dir halt sonst irgendwie in der GUI die Zugehörigkeit merken.
z.B. über ein Dictionary
Gruß
Michael
Hallo meisteralex,
ich verwende momentan die Telerik-Controls und bin damit mehr als zufrieden.
Momentan setze ich zwar nur die WPF Controls ein aber diese funktionieren echt gut, und durch die ganzen Beispielprojekte kann man auch gut nachschauen was man damit alles machen kann.
Zuvor hatte ich mal die Syncfusion Controls und die waren echt schlimm.
Ich habe da viele Bugs in den Controls gefunden welche beim Melden auch recht schnell gepatcht wurden, aber dafür haben dann andere Dinge nicht mehr funktioniert 😉
Bei den Telerik Controls ist mir bis jetzt noch kein Bug aufgefallen.
Und ich gehe mal davon aus dass die bei dein Silverlight Control eine ähnliche Qualität haben werden 😉
DevExpress hab ich mir noch nie angeguckt
Gruß
Michael
Hallo goldie,
was genau ist denn das Problem?
Du möchtest einfach nur dass er dir das heutige Datum anzeigt?
Dann könntest du es evtl. selbst setzen. Value = DateTime.Now??
Gruß
Michael
Hallo Ayke,
bei deinen Contract kannst du auch ein CallbackContract angeben.
Guckst du hier:
[ServiceContract(SessionMode = SessionMode.Allowed, CallbackContract =typeof(INetworkingCallback))]
public interface INetworking
{
[OperationContract(IsOneWay = false)]
[NetDataContractFormat]
object TestMethod(string message);
}
Und dann nocht der CallbackContract
public interface INetworkingCallback
{
[OperationContract(IsOneWay = true)]
[NetDataContractFormat]
void Foo(string message);
}
Als Binding habe ich das NetTcpBinding verwendet.
Am Server musst du dann nur Foo aufrufen um den Callback-Mechanismus auszulösen.
Beim Client kannst du dir dann die Klassen generieren lassen.
Dann bekommst du ein Foo-Event welches durch den Callback-Mechanismus gefeuert wird
So kannst du es dann abonnieren
var endpointAddress = new EndpointAddress(_connectionUri);
var serviceBinding = new NetTcpBinding(SecurityMode.None, false);
var networkingClientCallback = new NetworkingClientCallback();
networkingClientCallback.Foo += (obj, e) => {
//Event FIRED
};
_networkingClient = new NetworkingClient(new InstanceContext(networkingClientCallback), serviceBinding, endpointAddress);
_networkingClient.Open();
Hinweis: Ich bin kein WCF Experte und kann dir auch nicht sagen ob das der perfekte Stil ist.
Aber ich habe es so oder so ähnlich in einem kleinen Projekt mal umgesetzt und es läuft problemlos.
Gruß
Michael
Hallo Tossi65,
Ist ja fast Google ohne Browser.
Nicht nur fast 😉
Du kannst schon die google server befragen aber was willst du dann mit den Informationen in einem String?
Damit kann man nicht viel anfangen, und wenn du die Links hast dann musst du diese auch anzeigen um Informationen zu kriegen.
Deshalb könntest du das gleich das webbrowsercontrol verwenden
Gruß
Michael
Hallo jogibear9988,
du kannst den Style auch selbst ändern.
Einen der schon das Plus / Minus hat habe ich nicht auf Lager, aber hier Beispiel für ein TreeViewItem-ControlTemplate findest du ein Beispiel
Das musst du nur ein klein wenig modifizieren und das Problem ist gelöst.
Gruß
Michael
Hallo Thomas B,
guck dir mal das Dictionary<TKey, TValue> an.
Damit hast du dann deine Key-Value Pair wie du es brauchst.
Mit einer List ist das ganze ein Gefummel.
Wenn du einen Index aus irgendwelchen Gründen auslassen musst dann hast du bei der Liste schon ein Problem.
Gruß
Michael
Hallo AKNOT,
Geht die ganze Sache vielleicht einfach so schnell, dass man das Hinzukommen nicht sieht? Wie könnte man das lösen?
Das wäre schon möglich, dass es einfach zu schnell ist und somit die ganzen Einträge am Ende in einem Rutsch kommen.
D.h. Wahrscheinlich hast du hast schon alle Kombinationen gefunden bis die GUI sich neu gezeichnet hat
Wie lange dauert das suchen denn? Ganz kurz (eine Sekunde)?
Wenn da sehr viele Kombinationen innerhalb kurzer Zeit gefunden werden dann wäre es vielleicht besser wenn du diese nur zyklisch in einem Paket zurückgibst.
Dann musst du nicht jedes einzeln zur ListBox hinzufügen.
Um das zu verlangsamen könntest du im Backgroundworker in der Schleife wo du die Kombinationen suchst ein Thread.Sleep(500) einbauen und somit 500ms nach jedem Durchlauf warten.
Damit wird es langsam und du kannst du gucken ob die Einträge auch gleich kommen.
PS: Das Thread.Sleep sollte eigentlich normalerweise nicht verwendet werden, aber für solche Testzwecke kann man es schon einsetzen 😃
Gruß
Michael
Hallo chriscolm,
ich habe jetzt zwar nicht ganz verstanden was du erreichen willst, aber wenn du einfach an ein bestimmtes Element im Dictionary binden willst dann kannst du das mit einem IValueConverter machen.
D.h. Du bindest das ganze Dictionary und über den Converter + ConverterParameter (den String / Key den du willst) kannst du dir dann das passende Element aus dem Dictionary holen
Gruß
Michael
Hallo hugi,
was für Namen hättest du da gerne?
Die SSID vom WLAN?
Siehe: Get SSID of the wireless network i am connected to with c net on windows vista
Wenn du den HostName / DNS Name von deinem Rechner haben willst dann kannst du das so
string myHostName = System.Net.Dns.GetHostName();
oder so
string myHostName = Environment.MachineName;
machen.
Gruß
Michael
Hallo rte2k,
Ich möchte über einen Timer das Dataset aktualisieren und dann die Änderungen auswerten.
Wenn du nur die Änderungen aus der Datenbank mitbekommen willst dann ist ein Timer nicht der perfekte Weg.
Guck dir mal Sql Dependencies an, damit kriegst du über ein Event mit sobald es eine Änderung gibt. Dann kannst du die Daten neu laden.
müssen an einem Dataset Änderungen vorgenommen worden sein, um neue Zeilen aus der Datenbank-Quelle zu bekommen?
Kann ich dir nicht viel zu sagen weil ich DataSets so gut wie nie verwende..
Vermutlich musst du das manuell machen
Gruß
Michael
Hallo DerKölner,
willkommen bei myCSharp.de
Jetzt wollte ich ein bisschen Learning by Doing betreiben und mit C# und Forms ein Tick Tack Toe Spiel schreiben.
Damit habe ich auch angefangen 😉 Der nächste Schritt ist dann 4 Gewinnt 😃
Woran liegt das und wie kann man das beheben?
Das ist ohne weitere Details sehr schwierig zu sagen.
Kannst du evtl. etwas relevanten Code posten damit wir sehen können wo das Problem ist?
Den Debugger hast du schon verwendet, dann kann man so ohne Details nicht viel zu sagen.
Wie gibst du der anderen Klasse die Daten mit?
Gruß
Michael
Hallo b-oern,
oft hilft es wenn man einfach Klammern um das Binding setzt.
z.B. (Grid.Row)
Das funktioniert in diesem Beispiel nur weil man den Namespace nicht mit angeben muss.
Bei dir muss man das aber, deshalb funktioniert es so nicht.
Versuche es mal so
var title = new TextBlock();
Binding myBinding = new Binding();
myBinding.Path = new PropertyPath(Form.TitleProperty);
myBinding.Source = item;
myBinding.FallbackValue = "error";
title.SetBinding(TextBlock.TextProperty, myBinding);
Gruß
Michael
Hallo Ayke,
Kann ich vom Server auch auf Methoden vom Client zugreifen ?
Ich bin zwar auch kein WCF Profi, aber ich bin mir ziemlich sicher dass das so nicht funktioniert.
Du kannst aber sehr wohl Events am Server feuern und am Client abonnieren.
Gruß
Michael
Hallo,
die Thematik ob WPF oder Winforms besser ist wurde schon bis zum Abwinken diskutiert.
Siehe z.b. das hier: Windows Forms oder WPF
In deinem Fall würde ich eher sofort mit WPF starten, da es die neuere Technologie ist.
Weitere Details findest du im geposteten Thread und wenn du die Suche benutzt dann findest du auch noch einiges mehr.
Bitte beachte: [Hinweis] Wie poste ich richtig? 1.1
Gruß
Michael
Hallo,
das würde aber bedeuten das es für Hardware nahe Entwicklungen (Spiele, Datenbanken usw.) es einen rießen Aufwand bedeutet...
Ich vermute mal dass ich die ARM Prozessoren wohl kaum im Spiele-bereich durchsetzen werden.
Und bei Datenbanken wird es auch nur kleine lokale Datenbanken geben.
Deshalb ist das nicht so schlimm, wenn man für sein Spiel als Voraussetzung eine x86 CPU angibt.
Gruß
Michael
Hallo,
Hatte alle using drin hat aber beim klicken einen Fehler geworfen.
Was war denn der Fehler?
Bitte beachte: [Hinweis] Wie poste ich richtig?
Guck mal hier: How can I give another Process focus from C#?
Gruß
Michael
Hallo david.ka,
das sieht so aus als wäre es einmal so ein Carousel Control.
So eines z.B. WPF Carousel um die einzelnen Kategorien untereinander anzuzeigen.
Jede Kategorie hat dann noch ein paar Funktionen.
Was wahrscheinlich nur ein ItemsControl mit einem StackPanel ist
Also du hast eine Liste von Kategorien. Und jede Kategorie hat eine Liste von Funktionen / Aktionen welche du dann einfach binden und (durch Templates) anzeigen kannst.
Gruß
Michael
Hallo mrbob,
das kannst du recht einfach erreichen.
Dazu musst du einfach das Class Template editieren.
Wie das funktioniert bzw. wo du das findest siehst du hier: How to modify the default new class template in visual studio 2008 / 2010
Gruß
Michael
Hallo steve46,
das ist das sog. RibbonControl.
Dieses wird auch in dem Office Paket seit 2007 verwendet.
Das Control müsste seit .NET 4 direkt schon mit dabei sein ansonsten findest du es im WPF Toolkit
Gruß
Michael
Hallo Spontifixus,
jop das hab ich schon versucht 😃
Mach ich täglich.
Nur das Fenster schütteln finde ich nicht so sinnvoll, ansonsten ist das echt klasse.
PS: Das Feature nennt sich Aero Snap / Aero peek
Siehe: Aero Verbesserungen Aero Snap Aero Peek
Gruss
Michael
Hallo Honkey,
um die Änderungen von der Datenquelle direkt zum DataGrid reflektieren zu können musst du eine spezielle Collection verwenden (ObservableCollection<T>).
Damit kannst du eine Liste von dienen Objekten an das DataGrid binden.
Um auch die Änderungen in einzelnen Objekten zu reflektieren muss deine Klasse noch INotifyPropertyChanged implementieren.
Gruss
Michael
Hallo,
ich habe mal den Equatec Profiler ausprobiert und dabei kann man beim Client auch mitprotokollieren was der macht (welche Methoden aufgerufen werden, wie lange es dauert) usw. Aber den vollen Funktionsumfang gibt es wahrscheinlich aus Performancegründen nicht.
Ich weiß jetzt nicht sicher ob es was für dich ist, aber es ist auf jedem Fall einen Blick wert: EQUATEC Profiler
Das ist zwar nicht gratis, aber wenn man berechnet was man sich an Zeit und Nerven sparen kann wenn man einen Fehler sucht, dann ist das schon gerechtfertigt.
Gruss
Michael
Hallo Pico1184,
Du könntest da auch einen DataTrigger verwenden.
Wie du den DataTrigger mit dem Image verwendest findest du hier: WPF settings image source from datatrigger
Gruß
Michael
Hallo Seiskilos,
hast du dir FindLast(Predicate<T> match) schon mal angeguckt?
Damit sollte es möglich sein
Gruss
Michael
Hallo Barbara,
das kannst du recht einfach über eine Berechnung machen.
Wie das funktioniert (mit Query) findest du hier: Selecting points within a bounding circle
Wenn dir die Performance zu schlecht ist, dann könntest du versuchen die Daten vorher durch das bounding rectangle zu filtern.
Damit hast du dann nur noch einen kleinen Bereich in welchem du die Kreisberechnungen machen musst
Gruss
Michael
Hallo Taipi88,
das sind die Tage seit dem Datum 1.1.0000
733030 = 20.12.2007
733042 = 01.01.2008
Wenn man das dann durch 365 teilt dann kommt man auf 2008,33
Was den Jahren entspricht.
Die kleine Abweichung wird durch die Schaltjahre verursacht.
Gruß
Michael
Hallo Ahrimaan,
dazu kannst du die ASCII Tabelle verwenden.
Einfach bei 65 anfangen zu zählen bis du die Kombination findest.
Wenn die aktuelle Länge deines Strings zu kurz ist dann hängst du hinten ein A an und machst gleich weiter.
Um aus dem Int (65) den Char (A) zu bekommen kannst du den int einfach in einen Char casten.
Gruss
Michael
Hallo SunB,
Das Problem ist, dass ich bei zweitem Code eine Zeilenanzahl von 250544 erhalte (diese Zahl entspricht auch der tatsächlichen Zeilenanzahl im Textfile) und bei der Methode im oberen Code nur ca. 150000 Datensätze in der Datatable habe.
Ich würde es mal für den Anfang mit die 100fache Menge probieren 😉
Probier das mal mit 50 Zeilen aus, dann kann man leichter verfolgen was da passiert.
Dann kannst du relativ einfach durch den Code debuggen und gucken wo die Zeilen verloren gehen.
Ich sehe jetzt auf den ersten Blick keinen Fehler der so etwas auslösen könnte, aber bei so riesigen Datenmengen muss man immer aufpassen.
Versuch es einfach mal mit wenigen Zeilen dann kannst du vielleicht ein Muster erkennen und den Fehler somit lokalisieren.
Bei solchen riesigen Dateien muss man es sich immer gut überlegen ob es überhaupt sinn macht alles in den Speicher zu laden und ob man sich damit nicht evtl. OutOfMemory-Exceptions einfangen kann.
Gruß
Michael
Hallo SunB,
was genau ist denn das Problem? bzw. welche Zeilen gehen verlohren.
Guck dir mal die File.ReadAllLines / File.ReadAllText Mehotde an.
Damit kannst du die Datei einfacher einlesen.
Gruss
Michael
Hallo ofbe,
kannst du das etwas genauer erklären (evtl. mit kleinem Codebeispiel).
So kann man nur raten woran es liegen kann.
Gruß
Michael
Hallo exaveal,
nein, deine Get-Methode ist nicht richtig.
Du kontrollierst zwar ob du im richtigen Thread bist und rufst es auch mit Invoke auf, aber du gibst dann sofort "" zurück.
Deshalb erhälst du auch immer "" zurück.
Versuche mal den Rückgabewert von sender.Invoke(...) zurückzugeben.
Und guck mal hier: [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)
Ist auch ne nette Beschreibung zu dem Thema
Gruss
Michael
Hallo,
ich verwende die Express Version zwar nicht, aber ich bin mir doch 99.9999% sicher dass die dort den Debugger drinnen haben.
Hier findest du ein Tutorial wie man einen Debugger benutzt: Debugging
Wenn das immer noch nix nützt dann kannst du mal ein paar Ausgaben im Code hinzufügen, damit du siehst was er durchläuft und was nicht.
Bitte beachte: [Hinweis] Wie poste ich richtig? 1.1 und 1.1.1
Gruss
Michael
Hallo,
Wie würdest du denn die list befüllen ? Bräuchte da mal nen kleinen Anstoß 😃
Was muro richtig erkennt hat ist dass du diese xlist ausserhalb der Methode definiert hast.
Damit werden bei jedem Methodenaufruf die Elemente hinten angehängt.
Beim ersten Mal ist das noch ok, aber nachher hast du die Dinger dann Doppelt und Dreifach.
D.h. Entweder du rufst einfach Clear auf bevor du die Liste wieder befüllst oder du erstellst sie jedes mal neu.
Zudem kannst du dir die Zeile
if (x.Count() > 0)
sparen, da die Foreach-Schleife ohnehin nix macht wenn kein Element drinnen ist.
Gruss
Michael
Hallo hitzi,
Was für eine Erklärung gibt es dafür?
Beim Passiven FTP wird nur eine Verbindung zwischen Client und Server aufgebaut (also nur ein Port). Dabei hast du den Vorteil dass es auch funktioniert wenn der Server sich nicht zum Client verbinden kann (z.B. wenn der Client eine Firewall hat).
Beim Aktiven FTP meldet der Client sich am Server. Und dann werden zwei Verbindungen aufgebaut. Eine für die Daten und eine für die Steuerung.
Das funktioniert aber nicht wenn der Server nicht zum Client kommt.
Hier gibts Details dazu: File Transfer Protocol
Gruss
Michael
Das kuriose ist ja, das wenn beim ablauf die textbox sichtbar ist es funktioniert. Wenn beim SELBEN ablauf jedoch die textbox unsichtbar ist funktioniert es nicht mehr?? Also irgendwie glaub ich da is was faul 😉
Das klingt irgendwie unlogisch.. Mir fällt jetzt jedenfalls kein logischer Grund ein weshalb es nicht funktionieren sollte.
Versuch einfach durch den Code zu debuggen und stelle sicher was der Grund ist weshalb es nicht funktioniert, bzw. was nicht funktioniert.
Vielleicht schlägt diese IF-Abfrage aus einem anderen Grund fehl.
Gruss
Michael
Hallo Gumba,
das sollte so eigentlich schon funktionieren.
Vermutlich ist der Text in der Textbox noch nicht gesetzt wenn der Code ausgeührt wird.
Hast du schon versucht durch den code zu debuggen um zu sehen ob alle werte gesetzt sind wie sie das sein sollten?
Beim Arbeiten mit mehreren Threads gilt es immer zu beachten dass man nicht vom WOrker-Thread aus auf die GUI zugreift.
Dadurch kann es zu hässlichen Nebenwirkungen kommen ^^
Guck mal hier: [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)
Versuche einfach durch den Code zu debuggen dann siehst du schon ob alle werte stimmen.
Gruss
michael
Hallo
List<T>.RemoveAll hat nichts mit LINQ zu tun. RemoveAll ist eine normale Methode der List<T> Klasse.
Ehm ja, da hast du wohl recht 😃
Ich dachte es ist eine der Extension Methods
Ich persönlich finde den Einzeiler RemoveAll wesentlich sprechender, als eine for-Schleife.
Ich finde es schon auch so leserlicher, aber da er schon mit der Schleife Probleme hatte hab ich mir gedacht dass es etwas einfacher ist wenn man es so macht und nicht gleich diese mächtige Variante verwendet.
Aber das kann er dann machen wie er will.
@freundblase: Guck mal hier: List<T>.RemoveAll-Methode
Grüsse
Hallo,
Bei C# kann man die Liste nicht verändern, die man durch-iteriert.
Bei einer Foreach-Schleife ist das richtig.
Aber du kannst auch eine for-Schleife verwenden dann ist das kein Problem.
Du musst nur den Index um 1 verkleinern wenn du ein Element entfernst, weil sonst würdest du ein Element überspringen.
Einfacher ist es natürlich mit LINQ (wie marsgk) dir beschrieben hat.
Aber einfacher zu verstehen ist wohl die Variante mit der for-schleife 😃
Gruss
Michael
Hallo gijoe222,
du kannst ja einfach das CellTemplate von der GridViewColumn setzen (identisch wie beim XAML).
Um etwas aus den Resourcen zu laden kannst du **:::
Gruss
Michael
Hallo zusammen,
da braucht man nur einen kleinen Denk / Schreibfehler machen um so eine Diskussion auszulösen 😉
Ich habe jetzt in VmWare nachgeguckt und es ist wirklich nicht möglich die MacAdresse vom host zu verwenden. Ich habe das mit dem "Connected directly to the physical network" verwechselt.
D.h. man hat direkt die Netzwerkverbindung vom host, aber ziemlich sicher eine andere MAC
Wenn man etwas nachdenkt dann ist es wirklich logisch dass das nicht funktionieren kann. Ausser Vmware würde sich da irgendwo dazwischen hängen.
Gruss
Michael
Hallo,
theoretisch würde es schon mit der MAC-Adresse funktionieren.
Aber diese kann man sehr leicht faken und somit vorgauckeln jemand anderes zu sein.
Ich glaube dass man in VMware beim Netzwerkadapter auswählen kann dass er die Macadresse vom Host verwenden soll.
Somit würde diese Variante schon ins Wasser fallen.
AFAIK gibt es da keine wirklich eindeutige ID.
Du könntest dir aber über die verbaute Hardware mit einem Algorithmus eine ID generieren.
Guck mal hier: Detect if your program is running inside a Virtual Machine
Gruss
Michael
Hallo,
meine Programme werden meistens auch auf einem Touchscreen eingesetzt.
Momentan sind das irgendwelche AllInOne-PCs mit Touchscreen und einem 20'' Bildschirm.
Normalerweise werden da dann meine Programme als Fullscreen Andwendung angezeigt. Die Programme selbst habe ich auf Touchscreens optimiert (etwas größere Buttons, usw.). Einiges (wie das Scrollen) geht schon out of the box.
Als OS dient das Win 7 was auch recht gut damit zu bediene ist.
Klar, eine Maus und eine Tastatur sind da trotzdem bei vielen Dingen praktisch aber das wird in naher Zukunft auch so bleiben.
Ein Großteil der User wird ein IPad oder Android Tablet sicher nicht produktiv einsetzen, da man durch den Touchscreen + kleinen Bildschirm viele Dinge nicht so gut machen kann wie mit der Maus.
Zudem gibt es keine / wenige Geräte die man irgendwie mit den Tablets verbinden kann. Und wenn man damit arbeitet und nicht nur spielt dann braucht man ständig irgendwelche Geräte.
Fragmentierung wurde dank Android mit zum wohl meistgenutzten Wort in der Smartphone Community - und das ist nicht positiv gemeint. Da gibts riesen Probleme. Und da bevorzuge ich erstmal nen System was auf einer Plattform so tut wie man es sich es wünscht und dann kann man das Angebot immer noch ausweiten.
Da kann ich nur zustimmen.
Ich bin ein Android Benutzer und da merkt man richtig was das Problem dabei ist.
Dadurch dass das OS auf so vielen total unterschiedlichen Geräten läuft hat man schon viele Probleme.
Viele Apps im Market funktionieren nur auf bestimmten Typen, wenn eine neue Firmware rauskommt dann dauert es eine halbe Ewigkeit bis diese vom Hersteller (HTC, Motorola usw.) freigegeben wird. Dadurch hat man extrem viele unterschiedliche Geräte mit noch mehr unterschiedlichen Firmwares
Bei meinem Smartphone (HTC Hero) wurde vor kurzem das Android 2.2 von HTC für das Update freigegeben (Google hat mittlerweile schon das 2.3er seit ein paar Monaten freigegeben).
Genau aus diesen Gründen finde ich es schon gut dass Microsoft da harte Bestimmungen hat und ihr WP7 nicht auf jedem Smartphone installieren lassen.
Und bei den Tablets ist es das selbe.
Grüsse
Hallo Irathindur,
versuche mal die List<T> mit einer ObservableCollection<T> auszutauschen.
Weil die ObservableCollection sagt dem ListView dass es eine Änderung gab und damit wird dieser auch aktualisiert.
Wenn du eine normale Liste verwendest dann hast du zwar den neuen Eintrag drinnen der ListView weiß aber nicht dass es was Neues gibt und aktualisiert sich nicht
Gruss
Michael
Hallo,
achso, bei so einem riesigen Projekt kann man nicht mal schnell das system umstellen 😃
Verschiedene Schriftgrößen sieht imho irgendwie kacke aus.
Setze eine Textblock in den Button (als Content) und aktiviere das TextWrapping.
Dann macht er dir automatisch einen Zeilenumbruch wenn der Text zu lange ist.
Gruss
Michael
Hallo marix,
wieso gibst du deinen Button eine fixe Größe?
In WPF kann man mit den Layoutcontainern sehr einfach eine dynamische Oberfläche bauen die sich an den Inhalt anpasst.
Beim Button kannst du evtl. einen TextBlock hinzufügen und dann WordWrapping aktivieren.
PS: Eine lokalisierung mit der Datenbank ist nicht üblich. Einfacher ist wenn du dir ResourceDictionaries für jede Sprache erstellst welche du dann on the fly austauschen kannst.
Dann brauchst du dich nicht darum kümmern dass alle Texte refresht werden da es automatisch passiert
Gruss
Michael
Hallo,
Dann wunderts mich nur, das der Text, den ich vorher ausgebe, auch nicht angezeigt wird.
Wenn du den Text setzst, dann wird der nicht sofort angezeigt.
Der wird auf der GUI angezeigt wenn die GUI will (normalerweise sofort).
Wenn du aber im nächsten Schritt den Thread blockierst dann kann dieser nicht mehr die GUI aktualisieren und den Text anzeigen.
Guck dir den Link [FAQ] Warum blockiert mein GUI? mal an, da ist alles genau beschrieben was das Problem ist.
Gruss
Michael