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 trib
Thema: Nenne deinen Fall, wo du denkst, ohne modalen Dialog geht es nicht, und ich nenne eine Alternative
Am im Forum: Rund um die Programmierung

Um meinen Senf auch noch dazu zugeben ;-)
Selbst nutze ich ModaleDialoge meist für Einrichtungen o.ä.. Während man Einstellungen vornimmt, soll man nicht weiter in der Haupt-Applikation rumfummeln. Natürlich könnte ich das Hauptfenster Disablen, aber wenn es ohnehin nicht editierbar/enabled ist, bringt das imho auch keinen Mehrwert.

Anders sehe ich das bei Fehlermeldungen oder Warnungen. Wenn man diese einblendet, soll man das Fenster nicht mehr schließen können, bis dieses Problem behoben ist. Ein Disablen halte ich für unnötig, da gerade hier der Mehrwert liegt:
Ich gebe ein falsches Datumsformat ein, ein Fehler erscheint am oberen Rand. Ich fahre (weil ich es auch so gewohnt bin) erstmal mit meinen Eingaben fort, bis ich die letzte Eingabe getätigt habe. Dann lese ich mir die Meldung durch, oder ich weiß schon woran es liegt. Die Meldung erscheint nach der Datumseingabe => Klar, habe ich mich wohl vertippt.

Falls es nicht so eine triviale Eingabe wie eine Datum ist, schreibe ich ne Mail mit dem Problem, warte auf eine Antwort und arbeite einfach in einem anderen Fenster weiter.

Meines Erachtens das Perfekte Beispiel. Aber:
Dieses Fenster muss nun (zumindest) die Haupt-Applikation und ggf. den Aufrufer der entsprechenden Form sperren, da ich diesen Fehler nicht stehen lassen und das Programm beenden darf. Womit ich wieder bei einer gewissen Modalität gelandet bin...

Thema: ReportBuilder: Warum werden 2 pdf Seiten exportiert?
Am im Forum: Rund um die Programmierung

Zitat von hir
ja was braucht ihr denn an infos von mir ? soll ich mein rdl datei hier posten?
Zum Beispiel.

Oder weshalb Du erwartest, dass Du nur eine Seite als Ergebnis erhältst.
Wusstest Du, dass die Vorschau in VisualStudio oder auch im Browser nicht der Druckausgabe entspricht? In VS gibt es einen Button, der die Ansicht umstellen kann, im Browser muss man extra eine Komponente nachinstallieren und auf Drucken->Seitenansicht gehen.
Vielleicht liegt dort schon der Hund begraben?

Thema: Form bzw. Tabcontrol lädt langsam
Am im Forum: GUI: Windows-Forms

Hallo vivilakaphil,

Zitat von vivilakaphil
Ja, das einzige Problem ist, dass die Form einmal für 0,5 Sekunden ca. hängen bleibt.
Das ist jetzt erstmal nicht weiter tragisch, aber in Zukunft möchte ich natürlich dahin kommen, dass es sich nicht für 0,5 Sekunden aufhängt.

Leider kann ich dort keine Controls herausnehmen. Der Aufbau muss so bleiben wie er ist.

Es kommt nun natürlich darauf an, was diese 0,5 Sekunden kostet.
Wenn es am SQL-Statement liegt, musst Du die Abfrage vom Laden der Form trennen (Auslagerung in einen anderen Thread).

Liegt es an der Vielzahl der Controls, so bietet sich herbivores Vorschlang an. Darin geht es nicht darum, dass Du mit weniger Controls auskommen sollst, sondern darum, dass diese Controls erst geladen werden, wenn auch der entsprechende Tab angezeigt wird.

Gruß,
trib

Thema: ListView vs. DataGrid | Bedienung gegen Performance
Am im Forum: GUI: Windows-Forms

Hallo herbivore,

ein kleiner, aber feiner Tipp! Zwar dachte ich, dass es ausreicht, dass mit SuspendLayout() das Zeichnen unterbunden wird. Aber BeginUpdate() scheint noch eine ordentliche Schippe drauf zu legen:
Mit 432MS
Ohne 1.748MS

Hallo xxxprod,

leider gibt es das nicht für das Compact Framework. Aber prinzipiell entspricht dies ja dem 2. Vorschlage von herbivore.
Nur so viel laden, wie man sieht und entweder beim Scrollen nachladen oder in einen Background-Tread auslagern.
Das erfordert aber größere Anpassungen in meiner Struktur. Wie sich das bemerkbar macht (Scrollbar ändert die Größe, Invoke ist langsam, verspringen vom Fokus, usw.) muss ich mal ausprobieren.

Vielen Dank schonmal!

Zwei sehr interessante Links haben mir übrigens gut geholfen die Geschwindigkeit zu optimieren:
Optimization - Part 1
Optimization - Part 2

Thema: ListView vs. DataGrid | Bedienung gegen Performance
Am im Forum: GUI: Windows-Forms

Hallo zusammen,

ich stehe vor einer Glaubensfrage.
Für ein äußerst schwaches Endgerät, muss ich eine möglichst performante Lösung finden, um Daten darzustellen.
Dabei steht mir nur das Compact Framework 2.0 zur Verfügung.

DataGrid:
(Nein, nicht "View". Das gibt es unter CE leider nicht)
Die Vorteile des DataGrids liegen im DataBinding. Das ist ziemlich flott.
Jedoch gibt es wenig Möglichkeiten zum einfärben von Zeilen. Der Anpassung der Spaltenbreiten, Seitenweise scrollen, usw.
Also habe ich mir eine Hilfsklasse gebaut, die das alles ermöglicht. Natürlich ist die nicht sonderlich performant. Gerade beim Scrollen wird es sehr ruckelig.
Man sieht wie Zeile für Zeile die Farbe drüber gezeichnet wird.

ListView:
Eine ListView bietet schon einige Möglichkeiten von Haus aus mehr. Es gibt aber kein DataBinding!
Also muss ich per Schleife alle Daten manuell als ListViewItem und darin als SubItem erstellen.
Das Dauert ewig lange. Auf der anderen Seite, sind die Daten einmal geladen, scrollt es sich hervorragend in der ListView.

Mittlerweile habe ich ein Ergebnis, wo beide Lösungen nahezu identisch aussehen und sich auch gleich bedien lassen.
Habe ich ca. 5-10 Datensätze schlägt die ListView das DataGrid um Längen (50Ms zu 200MS).
Lade ich jedoch 200 Datensätze á 10 Spalten, so geht der Punkt 400MS zu 2.000MS an das DataGrid.
Wobei, wie schon angesprochen, das DG nun beim Scrollen sehr alt aussieht.

Für mich kommt eigentlich nicht in Frage beides zu verwenden, da es zwar ähnlich aber nicht identisch aussieht. Für den Anwender natürlich verwirrend.
Dass langsames Scrollen ein No-Go ist, sehe ich ein. Aber 2 Sekunden warten zu müssen, ebenfalls...

Habt Ihr etwas Erfahrung in dem Thema? Wozu würdet Ihr tendieren?

Thema: Wie Instanzvariable einer Klasse aus einer protected Funktion heraus befüllen? [==> einfach setzen]
Am im Forum: GUI: Windows-Forms

Wenn ich Dein Ziel korrekt verstehe, weißt Du anfangs nicht wie groß Dein Panel sein wird.
Das möchtest Du im OnPaint herausfinden und speichern, welche Größe Du zur Verfügung hast und entsprechend viele Label anzeigen?
Warum abonnierst/überschreibst Du nicht das Resize- oder Scale-Event des Panels?
Diese werden aufgerufen, sobald sich die Größe des Controls verändert...

Thema: [gelöst] EndpointNotFoundException [in Windows Mobile 6.5.3 APP]
Am im Forum: Netzwerktechnologien

Hallo g0su,

wenn Du das Programm auf Deinem Rechner erstellst, aber auf einem anderen (Dem CE Gerät) ausführst, wie wird dann der localhost wohl aufgelöst?
Ersetze die Adresse mal mit der IP Deines Entwicklungsrechners (Wo der WCF-Dienst läuft).

Thema: WCF und Windows Mobile 6.5.3 und "kleinere" Version
Am im Forum: Netzwerktechnologien

Was passiert wenn, wenn Du die URL im Browser eingibst?http://localhost:8500/MyService?wsdl
Dort solltest Du nun den Vertrag (Nach dem Tutorial getDate & getTime) in einem XML-Format sehen können.

Da der klassische Entwickler eher von Fauler Natur ist, würde ich den manuellen Weg über die NetCFSvcutil garnicht gehen. Rechte Maustaste auf "Verweise" - >"Web Verweis hinzufügen" -> URL eintragen -> Webverweisnamen hinterlegen -> OK drücken -> fertig!
Mit dem Webverweisnamen kannst Du nun die beiden Funktionen ansprechen. Wenn Dein Server eine Authentifizierung erfordert, kann man noch die Credentials mit geben.

So klappt es i.d.R. eigentlich immer problemlos. Sollte an dem Webservice noch etwas nicht passen, wirst Du bereits beim Verweis erstellen eine Meldung bekommen, mit der man hoffentlich etwas mehr anfangen kann ;-)

Thema: WCF und Windows Mobile 6.5.3 und "kleinere" Version
Am im Forum: Netzwerktechnologien

Dann vergiss den ersten Link und konzentriere Dich auf den Zweiten.

Seitens der Server-Anwendung definierst Du einen Vertrag in WCF. Von dem CE-Gerät kannst Du diesen abonnieren und Visual Studio generiert Dir automatisch die entsprechende Klassenstruktur.
Das ist sehr einfach, schränkt Dich aber ggf. in der Darstellung ein. Diese musst Du nämlich komplett auf dem Endgerät entwickeln.
Vielleicht wäre es praktischer eine Webseite zu hosten und diese anzuzeigen/einzubetten? Das ermöglicht Dir auch die Oberfläche serverseitig "nach Wünschen anzupassen".

Thema: WCF und Windows Mobile 6.5.3 und "kleinere" Version
Am im Forum: Netzwerktechnologien

Hallo g0su,

was hast Du denn überhaupt vor mit WCF und CE?
Für das Compact Framework wurde ab der Version 3.5 eine abgespeckte WCF Komponente bereitgestellt. Dies kann man auch abwärts von Windows CE 6 installieren:
Introducing WCF in CE

Oder möchtest Du die WCF-Komponente auf einem Server laufen lassen und von dem CE-Device darauf zugreifen? Das geht ganz einfach mit fast jeder CE Version. Voraussetzung ist das Compact Framework 2.0.
In Visual Studio den WCF-Pfad als Web-Referenz hinzufügen und den Rest übernimmt die IDE (svcutil.exe).

Dazu eignet sich folgendes Tutorial, welches das Erstellen und auch gleich das Konsumieren des WCF-Services beschreibt:
Beginnerst Tutorial to understand WCF

Thema: dataGridView: Ursprung wiederherstellen/Reset
Am im Forum: GUI: Windows-Forms

Wie FZelle schon andeutet, ist es wichtig die Daten aus der Datei erstmal in ein Objekt zu übertragen.
Damit erzeugt man eine Trennung zwischen der Anzeige und der Daten.

Er schlägt eine DataTable vor. Man kann aber auch eine X-beliebige Collection verwenden und der DataSource des DataGridViews übergeben. Optimaler weise per DataBinding.
Vielleicht hilft das hier schonmal zum Verständnis weiter:
A Detailed Data Binding Tutorial

Thema: Marshal.FinalReleaseComObject - Objekt lebt trotzdem weiter
Am im Forum: Rund um die Programmierung

Zitat von Mallett
Meine Vermutung wäre jetzt, dass die Komponente intern schlampig programmiert ist und beim Aufruf von Release() nicht korrekt aufräumt. Kann man davon ausgehen, oder gibt es noch weitere Möglichkeiten?
Hallo Mallett,

dass muss es nicht automatisch heißen. Vielleicht ist das ja sogar (aus irgendwelchen Gründen so gewünscht).
Diese Komponente kann ja im Hintergrund Threads starten oder weitere DLL´s nachladen.
Falls es eine Beschreibung dazu gibt, wird dort sicherlich drinstehen, wie man das Objekt korrekt Disposed (Erwarte ich jetzt einfach mal von einem Hersteller wie Siemens). Je nach dem welche Komponente das ist, kann es ja sogar immens wichtig sein, bestimmte Reihenfolgen beim Beenden einzuhalten.
Man erinnere sich an die iranische Zentrifugensteuerung in der Urananreicherungsanlage. Die sind nicht korrekt runtergefahren ;-)

Thema: XmlSerialisierung - neue boolsche Property da nicht in Xml vorhanden als true laden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ein anderer Lösungsansatz wären Properties.
Wenn der XmlSerializer keinen Knoten findet, wird der Initialwert verwendet.


    public class Item
    {
        private bool _flag = true;

        public bool Flag
        {
            get { return _flag; }
            set { _flag = value; }
        }
    }

Ist imho auch sauberer mit Properties zu arbeiten, da man gerade bei der Serialisierung auch ab und an Konvertierungen ausführen muss.
Man kann auch einfach die Einrichtung zurücksetzen, indem man das XML löscht. Finde ich auch praktisch :)

Der Resharper meckert zwar immer, wenn man Getter & Setter nicht verändert (Convert to Auto-Property), aber ich finde es besser eine gleiche Struktur zu haben als zu mischen.

Thema: Windows Mobile Anwendung verteilen
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo eddieromm,

das ist nicht ganz korrekt. Du kannst das entsprechende Framework auch mit installieren lassen.
Compact Framework bereitstellen
In den Projekt-Eigenschaften unter "Geräte" den Haken bei "Neuste Version von .Net bereitstellen" setzen.

Sollte das wirklich nicht funktionieren, kannst Du einfach die CAB-Datei manipulieren und die Installation des Frameworks dort hineinkopieren (Per ZIP-Programm öffnen).
Die _setup.xml beinhaltet dann die entsprechenden ausgeführten Dateinamen. Man kann das auch durch Ändern der INF machen, müsste die CAB dann aber manuell (per Konsole) erstellen.

Um den Kopier- & Installationsvorgang zu beschleunigen, gibt es Freeware, die das für Dich übernimmt:
CAB Active Synch
Diese habe ich persönlich allerdings noch nicht getestet.

Gruß,
trib

Thema: Multilanguage GUI - Sprache vs. Länderspezifisch
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Xan,

dann ist es ja so wie ich es erhofft habe. Für DE und AT habe ich keine unterschiedlichen Texte. Daher hätte ich es auch als unsinnig empfunden, trotzdem für jede Sprache eine *.resx anlegen zu müssen.

Natürlich hast Du Recht, ich hätte es einfach ausprobieren können. Allerdings habe ich den Wald vor lauter Bäumen nicht gesehen, da ich aktuell viel für das Compact Framework mache, wo man die Culture Code-technisch nicht umstellen kann. Dort ist lediglich die installierte Sprache ausschlaggebend.

Danke!
trib

Thema: Multilanguage GUI - Sprache vs. Länderspezifisch
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Guten Morgen zusammen,

wenn ich in Forms unterschiedliche Sprachen verwenden möchte, habe ich ja für Deutsch z.B. folgende Auswahlmöglichkeiten:

  • de
  • de-DE (Deutschland)
  • de-AU (Österreich)
  • de-CH (Schweiz)
  • u.v.m.
Kann ich nun einfach "de" verwenden und diese werden automatisch an DE, AU & CH vererbt?

Für MessageBoxen usw. arbeite ich ebenfalls mit *.resx Dateien. Allerdings muss ich diese aus dem Code aufrufen. Dort wird imho auf eine exakte Übereinstimmung geprüft (Die sich zumindest per Current[UI]Culture manuell übersteuern ließe).

Wenn möglich würde ich gerne für de & en nur je eine Datei pflegen müssen.
Hat das schonmal jemand getestet? Habe nur Systeme mit de-DE & en-US hier.

Thema: serielle Schnittstelle einlesen - unterschiedliche Anzahl von Zeichen
Am im Forum: Rund um die Programmierung

Hallo zusammen,

weshalb den Zeitpunkt des Auslesens mit dem Sleep künstlich verzögern, wenn man auch ein Event verwenden kann?
Das Event

DataReceived
wird aufgerufen, sobald Daten im ComPort angekommen sind (i.d.R. mit einem CarriageReturn und/oder Linefeed abgeschlossen wurden).
Darin dann per ReadExisting() alles auslesen was bisher angefallen ist und mit der von Dir vordefinierten Zeichenlänge vergleichen.

Normalerweise kann man durch die korrekte Konfiguration den Com-Port so definieren, dass das Event exakt mit Deiner Datenmenge aufgerufen wird. Stichwort Zeilenendzeichen (NewLine).

Thema: Team Foundation Server: Workspace löschen
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo dengel,

Du kannst ganz einfach die Solution (*.sln) mit dem Editor öffnen und dann den Knoten:

Global
	GlobalSection(TeamFoundationVersionControl) = preSolution
	[...]
	EndGlobalSection
entfernen. Zur Sicherheit solltest Du diese aber vorher natürlich kopieren :)

Thema: Dateien via DragnDrop auf den Öffentlichen Desktop ablegen: Zugriff verweigert
Am im Forum: Rund um die Programmierung

Das ist genau was ich gemeint habe. Die Anwendung und der Explorer müssen vom selben Benutzer gestartet werden, damit sie interagieren dürfen. Sobald eins von beiden als Administrator läuft, geht Drag&Drop nicht mehr.
Da es aber häufig notwendig ist, VS als Admin auszuführen (Habe dafür extra ein Script um Registry-Einträge umzusetzen), kommt man um einen Workaround nicht herum.
Z.B. ein Button, der nur im Debug-Modus eingeblendet ist und der eine eigene Instanz des Explorers startet.

Thema: Dateien via DragnDrop auf den Öffentlichen Desktop ablegen: Zugriff verweigert
Am im Forum: Rund um die Programmierung

Zitat von Abt
Nein. Nur weil man VS als Admin startet (funktioniert das überhaupt ohne lokalen Admin? Im Web jedenfalls nicht) heisst das nicht, dass die Anwendung mit Adminrechten oder dem entsprechenden Token läuft.

Ist es denn so, dass Deine Applikation aus VS gestartet wird? Dort habe ich (zumindest unter WIN8) festgestellt, dass Drag&Drop grundsätzlich nicht mehr funktioniert. Denn VS startet die Applikation unter einem anderen Benutzerkontext als der Explorer läuft. Daher gibt es keinen Zugriff.
Startet man die Anwendung aus dem Bin/Debug-Verzeichnis manuell, funktioniert es.

Thema: Samsung Galaxy S5 Upgrade auf Android 5 ?
Am im Forum: Smalltalk

Hallo multitasker,

es ist doch noch garnicht sicher, ob die kommende Android-Version die 5.0 sein wird...

Aber ich würde mal davon ausgehen, dass es so läuft wie auch schon in der Vergangenheit:
Die Flagschiffe, wozu das S5 zweifelsohne gehört, werden i.d.R. 2 Jahre lang mit Updates versorgt.
Im ersten Jahr noch etwas schneller und im 2. Jahr wird es bereits das S6 geben. Daher wird das S5 etwas schwiegermütterlich behandelt und alles dauert etwas länger.

Für HTC Benutzer macht das praktisch keinen Unterschied, die Updatephilosophie ist sehr ähnlich.

Daher hast Du immer noch die Möglichkeit ein Custom ROM zu verwenden, wenn Samsung nicht schnell genug nachkommt oder nach 2 Jahren den Support einstellt oder massiv zurückfährt.

Thema: Arbeitsplatz zu Hause: Fluch oder Segen?
Am im Forum: Smalltalk

Zitat von Sebastian.Lange
Grundsätzlich würde ich sagen das ich mich zu Hause besser auf meine Arbeit konzentrieren kann aber mich gleichzeitig auch viel leichter ablenken lasse.

Hallo Sebastian,

ist das nicht ein Paradoxon? ;)
Aber ich verstehe natürlich was Du meinst. Das geht glaube ich jedem so, dass man Zuhause zwar von den Kollegen nicht so häufig unterbrochen wird, aber im Gegenzug die Kaffeemaschine oder der Kühlschrank eine gewisse Anziehungskraft entwickelt.
Wenn ich ein großes, komplexes und möglicher Weise auch interessantes Projekt habe, kann ich sehr gut von Zuhause aus arbeiten. Dann mache ich auch eher weniger Pausen als auf der Arbeit.
Sonst, bei fragmentierten Aufgaben, versuche ich das HomeOffice eher zu vermeiden.

Daher hat es sich bei mir persönlich eingebürgert, das HO nur zu nutzen, wenn man einen Handwerker reinlassen muss oder ein Paket erwartet.
Allerdings ist mein Arbeitsweg auch vergleichsweise kurz.

Thema: DependencyProperty Validation - Wert aus Button an Textbox übergeben
Am im Forum: GUI: WPF und XAML

Hmm, ich glaube wir reden aneinander vorbei.
Jede Änderung an der Textbox kommt am Button an. Dieser weiß immer korrekt welcher Pfad in der Textbox steht.
Klicke ich auf den Button um einen neuen Pfad auszuwählen, fülle ich den "Text" des Buttons. Dieser Button hat in dem Databinding den Text der Textbox hinterlegt.
Nun wird auch korrekt der neue Pfad angezeigt. Klappt perfekt in beide Richtungen.
Aber:
Das Databinding hinter der Textbox bekommt von der Änderung nichts mit und speichert weiterhin den alten Pfad. Auch wenn schon der neue angezeigt wird.

Daher tippe ich darauf, dass ich entweder im Button ebenfalls auf das Databinding der Textbox verweisen muss (dann klappt die Anzeige aber nicht mehr) oder im Databinding des Buttons mitgeben muss, dass eine Validierung der Textbox ausgeführt werde muss.

Mein Ziel ist eigentlich nur ein Control (Button), das farblich anzeigt ob eine Datei oder ein Pfad exisitiert oder zugreifbar ist. Klickt man drauf, so kommt ein Dialog zum auswählen des Pfades oder der Datei. Dieser soll an eine Textbox gebunden werden, die die Daten enthält.

Gruß
trib

[EDIT:]
Endlich habe ich es!
Es war wirklich das Problem, dass ohne ein explizites Validate der Textbox, das Databinding nicht aktualisiert wird. Das muss ich nun in der TextBox manuell nochmal mitgeben:

<TextBox x:Name="PathTextBox" Text="{Binding DebugPath, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true, UpdateSourceTrigger=PropertyChanged}" />
Finde ich jetzt etwas unschön, da meine Idee eigentlich war keine Änderungen an der Textbox vornehmen zu müssen, sondern nur das zusätzliche einbinden des Buttons.
Hauptsache es läuft erstmal!
UpdateSourceTrigger=PropertyChanged
heißt das Zauberwort! Das dann die Daten-Klasse natürlich von INotifyPropertyChanged ableitet, ist selbstverständlich, denke ich.

Thema: DependencyProperty Validation - Wert aus Button an Textbox übergeben
Am im Forum: GUI: WPF und XAML

Zitat von Robin0
Du musst das in "FrameworkPropertyMetadataOptions" machen :).
GEt und set werden bei Bindings nicht ausgeführt sonder nur der PropertyChangedCallback der DependencyProperty was in deinem fall "FrameworkPropertyMetadataOptions" ist.

Hallo Robin0,

danke für Deinen Tipp. Leider tut sich weiterhin noch nichts. Wenn ich Dich korrekt verstanden habe, dann müsste es doch so funktionieren:

        private static readonly FrameworkPropertyMetadata PropertyMetadata =
                                        new FrameworkPropertyMetadata("",
                                         FrameworkPropertyMetadataOptions.BindsTwoWayByDefault |
                                        FrameworkPropertyMetadataOptions.Journal, 
                                        TextValueChanged,
                                        TextValueCoerceValue,
                                        false, UpdateSourceTrigger.PropertyChanged);

        public static readonly DependencyProperty TextProperty =
        DependencyProperty.Register("Text", typeof(string), typeof(BrowserDialog),
        PropertyMetadata, TextValueValidate);
        private static void TextValueChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
        {
            var sender = o as BrowserDialog;
            if (e.NewValue != null)
                if (sender != null) 
                    sender.Text = e.NewValue.ToString();
        }

        private static object TextValueCoerceValue(DependencyObject dependencyObj, object val)
        {
            return val;
        }

        private static bool TextValueValidate(object val)
        {
            //Custom validation block which takes in the value of DP
            //Returns true / false based on success / failure of the validation
            return true;
        }
Die Methode TextValueValidate wird auch ausgeführt, sobald ich einen Pfad auswähle.
Meine Vermutung ist aber, dass ich ja im Binding des Buttons den Text der Textbox drin habe und das schlichtergreifend nicht durchgereicht wird. Muss ich dort vielleicht noch etwas basteln?

Thema: DependencyProperty Validation - Wert aus Button an Textbox übergeben
Am im Forum: GUI: WPF und XAML

Guten Morgen,

eine Textbox soll ihren Wert aus einem Button bekommen.
Dazu habe ich dem Button die Textbox übergeben:

<TextBox x:Name="PathTextBox" Text="{Binding FilePath, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" />
<my:FileDialog x:Name="PathBrowserDialog" Text="{Binding Text, ElementName=PathTextBox, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true, UpdateSourceTrigger=PropertyChanged}" />

Im Code des Buttons gehe ich wie folgt vor:

        public static readonly DependencyProperty TextProperty =
            DependencyProperty.Register("Text", typeof(string), typeof(FileDialog),
                                        new FrameworkPropertyMetadata("",
                                                                      FrameworkPropertyMetadataOptions
                                                                          .BindsTwoWayByDefault, TextValueChanged));

        private static void TextValueChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
        {
            var sender = o as FileDialog;
            if (e.NewValue != null)
                if (sender != null) 
                    sender.Text = e.NewValue.ToString();
        }

        public string Text
        {
            get { return (string) GetValue(TextProperty); }
            set
            {
                SetValue(TextProperty, value);
            }
        }

        private void button_Click(object sender, RoutedEventArgs e)
        {
            Text = GetPathFromDialog();            
        }

Nun klicke ich den Button, wähle einen Pfad aus und dieser wird prompt in der Textbox angezeigt.
Allerdings passiert im CodeBehind nichts und der Pfad wird nicht validiert.

Wie kann ich den Button dazu bringen, dass er den Wert der Textbox an das Binding übergibt?

Dank euch für jede Idee,
trib

Thema: Serial Klasse Empfang eines Virtuellen Com Port geht nicht.
Am im Forum: Rund um die Programmierung

Zitat von AxelA
Woran könnte das liegen?
An einer nicht ausreichenden Konfiguration?
  • Baud-Rate
  • Parity
  • Handshake
  • Stop-Bits
  • Data-Bits
  • Request to Sender
  • Data Terminal Ready
Um nur mal ein paar Möglichkeiten zu nennen.

Vielleicht kann man das ja aus dem Freeware-Programm auslesen. Teste mal die unterschiedlichen Handshakes aus. Bei den anderen Einstellungen müsste zumindest eine Reaktion (falsche Werte) auftreten.

Thema: FileCopy ohne Dateierweiterung
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Also oben hat RaVeN1703 doch beschrieben, dass die Dateien in der Datenbank ohne Erweiterung vorliegen. Auf dem Dateisystem natürlich schon (spezielle Endung der Software).

Demnach gibt es zwei Möglichkeiten:

  • Die von herbivore genannte, anhand des Pfades und des Dateinamen die Endung zu ermitteln
  • Handelt es sich bei allen Dateien alle um die gleichen Endungen aus Eurer Software, diese "hart" anfügen.

Nach beiden Fällen gilt es dann diese Endung im Quellpfad, als auch im Zielpfad anzuhängen.

Thema: SqlDependency funktioniert nur einmal
Am im Forum: Datentechnologien

Ganz stumpf vermutet:
Du rufst restart() nicht in OnChange() auf?

Die Dependency wird immer nur einmal gefeuert, wie Du schon selbst schreibst. Anschließend muss die Registrierung erneut erfolgen. Das sehe ich in diesem Code allerdings nicht.

Gruß,
trib

[EDIT:] Zu schnell überflogen. Du rufst ja startMonitoring() nochmal auf.
Also ich habe das wie folgt gelöst:

        private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
        {
            // Remove the handler, since it is only good
            // for a single notification.
            SqlDependency dependency = (SqlDependency)sender;
            dependency.OnChange -= dependency_OnChange;            

            // Invalid SQL-Query
            if (e.Info == SqlNotificationInfo.Invalid && e.Source == SqlNotificationSource.Statement && e.Type == SqlNotificationType.Subscribe)
            {            
                if (EventLog != null)
                    EventLog.WriteEntry("ungültiges SQL Statement. Die Dependency wird abgebrochen!");
                return;
            }

            ++_changeCount;
          
            // Reload the dataset that is bound to the grid.
            InitDependency();            
        }

private void InitDependency()
        {
            _dt.Clear();
            // Make sure the command object does not already have
            // a notification object associated with it.
            _command.Notification = null;

            SqlDependency dependency = new SqlDependency(_command);
            dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
            
            if (_connection.State == ConnectionState.Closed)
                _connection.Open();
            _dt.Load(_command.ExecuteReader(CommandBehavior.CloseConnection));

            foreach (DataRow row in _dt.Rows)
                if(EventLog != null)
                    EventLog.WriteEntry("EntryNo: " + row[0] + " ChangeCount: "+_changeCount.ToString());
                else
                    Console.WriteLine("EntryNo: " + row[0] + " ChangeCount: "+_changeCount.ToString());
        }

Wenn ich mich recht erinnere, ist es zwingend notwendig jedes Mal die Daten per DataTable.Load abzufragen. Sonst kam bei mir auch nur eine Meldung...

Thema: OpenFileDialog V2 - NOTools.FileSystemDialogs
Am im Forum: .NET-Komponenten und C#-Snippets

[Offtopic]

Zitat von tom-essen
... Favoritenliste aus dem Explorer, ich hab' allerdings bisher noch nicht rausfinden können, wo die verwaltet wird.
Unter C:\Users\User Name\Links\
Zumindest unter Win7 & 8. Vorher meine ich lag das in der Registry...
[/Offtopic]

Das Control an sich ist super! Mir persönlich hätte es aber sehr gefallen die Funktionalität von Open/Safe & File/Folder in einem Control zu haben. Diese benötige ich häufig für Einrichtungs-Dialoge und muss dementsprechend mit 4 Objekten jonglieren ;)

Thema: Daten von Com-Port lesen, bis bestimmte Zeichenfolge gefunden wurde [oder Timeout eintritt]
Am im Forum: Rund um die Programmierung

Zitat von herbivore
da die Menge und Größe der String-Fragmente unbeschränkt ist, ist es keine gute Idee, += zu verwenden

Hallo herbivore,

das ist vollkommen richtig. Der oben genannte Code wird aber niemals soweit kommen, da es von vornherein eine Endlosschleife gibt. Daher wollte ich erstmal das grundsätzliche Problem erläutern, bevor es ans optimieren geht.

Wenn man es "richtig" machen möchte, sollte man ohnehin mehr Informationen über das angeschlossene Gerät haben.
Werden Start- & Endzeichen übermittelt, kann man die Chunks schonmal genauer abstecken und unnütze Daten verwerfen.
Dann sollte man aus dem Event statt ReadLine() besser ReadExisting() verwenden. So liest man in einem Rutsch alle Zeichen aus dem Port, bis das Event erneut geworfen wird. Und man sperrt sich nicht durch eine Schleife mögliche weitere eingehende Nachrichten.
Wenn der Port nicht alle paar Millisekunden eine Rückmeldung gibt, ist bei heutigen Computern eine simple String-Verkettung das geringste Problem.
(pre optimization is the root of all evil)

Der Timer erledigt sich dann sicherlich von alleine, da sich das Programm auch nicht mehr sperrt. Ist es so wie Lennart vermutet, kommt man aber um einen Timer nicht herum. Möglicherweise reicht es aber schon aus eine Startzeit zu setzen und im DataReceive zu überprüfen ob ein Grenzwert überschritten wird. (Ist aber auch witzlos, wenn der Port überhauptnicht antwortet :) )