Laden...
M
Benutzerbeschreibung

Forenbeiträge von martinO Ingesamt 164 Beiträge

06.04.2011 - 10:29 Uhr

Arbeitest du im VS auch im Release mode?
Rechtsklick auf die Solution und "Clean Solution" hilft oft - dann sollte es im VS und per Direktstart auf dem EXE funktionieren.. oder eben an beiden Orten nicht mehr.

Benutzt du R#? Manchmal (k.A. wann und warum) benutzt die IDE dann auch ShadowCopied Assemblies. Diese lassen sich durch ReSharper => Options => Tools => Unit Testing => "Shadow-copy assemblies being tested" Häckchen entfernen. (ich weiss, schaut nach Testing aus - hat aber manchmal auch Einfluss auf den Rest)

21.03.2011 - 16:09 Uhr

Der Sinn liegt m.E. auch in gewissen rechtlichen Belangen.

Papier glaubt alles und ist sehr geduldig. So kann man 20 Jahre, nachdem CD Lesegeräte schon längst nicht mehr verfügbar sind, noch immer den ausgedruckten Sourcecode nachlesen, den man vor 100 Jahren geschrieben hat.

Meine FH wollte eine CD für's Archiv. Kann mir vorstellen, dass es heute noch Stellen gibt, die ihr Archiv in Papierform haben wollen.

18.03.2011 - 08:37 Uhr

Hallo zusammen

In SharePoint gibt es ein Property LastChangeToken - leider gibt es dieses nicht für's Client Object Model von SharePoint 2010. Nun möchte ich herausfinden, welches mein "LastChangeToken" in einer Liste von Changes ist (ClientContext.Web.GetChanges(...)).

Leider unterstützt ein ChangeToken den direkten Vergleich nicht (changeToken1 > changeToken2 geht nicht).

Es gibt auf jedem ChangeWeb/ChangeFile/ChangeFolder... ein Property Time, welches von Typ DateTime ist. Ich könnte diese Zeiten vergleichen - wenns schon ein ChangeToken gibt, möchte ich diesen verwenden.

Weiss jemand, wie man anhand vom ChangeToken den aktuellsten aus einer Liste holt?
Ein ChangeToken ist irgendwie so aufgebaut:
1;2;52876114-5e04-45e1-80da-cdcfc2da56b2;634354497522000000;6753
oder 1;2;52876114-5e04-45e1-80da-cdcfc2da56b2;634354497526170000;6754
Was soll ich hier vergleichen? Die letzte Nummer scheint fortlaufend zu sein - scheint... im Web habe ich nichts über den Aufbau gefunden und daher wollte ich mal fragen, ob von euch jemand damit rumgespielt hat...

14.03.2011 - 15:44 Uhr

Schon mal so probiert:


<Image Source="/Assemblyname;component/Path/to/image.jpg" />

(also einzig ein / fehlt noch)

01.03.2011 - 15:15 Uhr

So müsste es funktionieren:

// im konstruktor
this.treeView.CommandBindings.AddRange(this.CreateCopyPasteCutCommandBindings());
        protected ICollection CreateCopyPasteCutCommandBindings()
        {
            return new List<CommandBinding>
                       {
                           new CommandBinding(
                               ApplicationCommands.Copy,
                               (s, e) => this.MyCopy(),
                               (s, e) => e.CanExecute = this.MyCanCopy()),
                           new CommandBinding(
                               ApplicationCommands.Cut,
                               (s, e) => this.MyCut(),
                               (s, e) => e.CanExecute = this.MyCanCut()),
                           new CommandBinding(
                               ApplicationCommands.Paste,
                               (s, e) => this.MyPaste(),
                               (s, e) => e.CanExecute = this.MyCanPaste())
                       };
        }

Edit: sorry - das wäre die Lösung für WPF 😉

17.02.2011 - 14:05 Uhr

Hallo zusammen

Ich muss docx Files bearbeiten. Daher habe ich mir das OpenXML SDK "gegönnt". Dieses Framework sollte dem Entwickler ja helfen, die Office-Files einfacher zu bearbeiten.

Nur: min 90% aller Tutorials/Forenbeiträge etc verwenden das SDK nur um den Xml-Stream des Dokumentes zu holen und der Rest wird von Hand via XPath (xml, xdocument, xelement) gelöst...

Wer verwendet das OpenXml SDK überhaupt? Und für was?

Ein einfaches Beispiel wäre, alle Paragraphen von Dokument B an eine bestimmte Stelle im Dokument A zu kopieren. Mit documentB.GetPartsOfType<Paragraph>(); geht das aber nicht, weil Paragraph nicht von OpenXmlPart abgeleitet ist. Im Netz finde ich nur standard XPath Anweisungen, welche die Elemente <p> auslesen.. => warum nun das SDK?

Martin

PS: Vorweg: AltChunk funktioniert in meinem Beispiel nicht

04.01.2011 - 13:07 Uhr

Hallo talla

Merci für deine Antwort. Stimmt - eigentlich wäre es am saubersten, zuerst die VM-Daten ins Model zu schreiben, den entsprechenden Datensatz aus dem Model zu kopieren, ins Model pasten und das Model wieder ins VM zu laden.

Dieser Ansatz wird sicher auch diskutiert.

04.01.2011 - 10:49 Uhr

Hallo zusammen

Verwendetes DI-Framework: Ninject
Technologie: WPF mit MVVM

Um etwas ins Clipboard zu speichern und daraus zu lesen, muss das Objekt Serializable sein. Um etwas zu deserialisieren, braucht es einen parameterlosen Konstruktor.
Nur... Wir verwenden DI um z.B. die Übersetzungs-Funktionalität zu injecten. Dann können Werte für die View im ViewModel übersetzt werden

ViewModel:

public Konstruktor(ILocalization loc) {...}

string Label{get;set;}

string TranslatedLabel { 
  get { return this.loc.Translate<string>(this.Label); }
}

In der View wird dann nur TranslatedLabel gebunden. (in der View zu übersetzen wäre möglich, jedoch soll dieses einfache Beispiel aufzeigen, wo das Problem liegt - gibt noch andere Abhängigkeiten)

Wenn ich nun einen leeren Konstruktor im ViewModel erzeuge, sind all meine Injections natürlich null wenn ich das VM wiederherstelle mit Clipboard.GetData("meinVMFormat");

Wie würdet ihr diese Aufgabe lösen?

Die einzige Möglichkeit die mir einfällt ist, die nötigen Abhängigkeiten in die Paste-Implementierung zu injecten, das VM wiederherzustellen (in der Paste Implementierung) und dann die VM Abhängigkeiten von der Paste-Implementation aus zu setzen. Hab ich aber noch nicht getestet, weil ich eine schönere Lösung finden möchte...

Merci im Voraus und gruess

Martin

06.12.2010 - 16:00 Uhr

Mit VS hab ich das noch nie probiert. Allerdings hatte ich mal die Beta von dotCover (jetbrains) und es hat auf Anhieb geklappt.

Ansonsten verwenden wir ncover (konsolenmässig).

Wenn du mit NCover oder dotCover Probleme hast, kann ich dir evtl. weiterhelfen

15.11.2010 - 15:02 Uhr

Hallo zusammen

Wir testen unser GUI mit Ranorex und nunit und der Report erscheint dann in TeamCity (Jetbrains). Alles in allem wirklich cool, denn es läuft wie geschmiert.
Nur ein Problem: Wir testen viele Files mit einem Test über das Attribut TestCaseSource (wer's nicht kennt, macht nix - hat keinen Einfluss)

Der Test sieht ungefähr so aus:

[Test, TestCaseSource("Sources")]
public void TestMyFiles(string filename) {
  ...
  Test();
  ...
  Assert(...);
}

Jetzt möchte ich aber wissen, bei welchem File der Test abgeschmiert ist. Also möchte ich vor dem Testlauf den filename ausgeben, der dann auf dem nunit-Report erscheint, welcher von TeamCity ausgelesen wird.

Trace.WriteLine(string.Format("Filename {0}", filename));
und
Ranorex.Report.Debug(string.Format("Filename{0}", filename));

fügen nichts dem Report hinzu.

Was kann ich noch probieren? Wie bringe ich den Filename in den Report? Merci schonmal

07.10.2010 - 15:11 Uhr

Hallo zusammen

Ich hab einen Installer mit InstallShield gemacht, welcher zwingend als Admin gestartet werden muss (kopieren von einigen Files funktioniert nur als Admin...).
Als Dependency muss .NET 4.0 installiert werden.

Problem: Die Installation von .net 4.0 benötigt einen Reboot. Öffne ich den Installer als Administrator, wird die Installation nach dem Reboot nicht mehr als Admin ausgeführt. Weiss jemand, wie man die weitere Installation unter demselben User weiterführen kann, wie zu beginn?

Merci und Gruss

Martin

09.09.2010 - 08:48 Uhr

Hallo winSharp93

Vielen Dank für die Antwort. Ich werd mir mal die Dispatcher-Geschichten reinziehen müssen.

08.09.2010 - 15:31 Uhr

Hallo zusammen

ich hab für eine Aufgabe 2 Lösungen gefunden. Irgendwie gefällt mir die DoEvents Lösung besser, aber da muss ich selbst noch was hinzuimplementieren und die andere Lösung wäre UpdateLayout zu verwenden, welches bereits durch .net zur Verfügung gestellt wird.

Problem: Ich muss zwingend abwarten, bis ein Grid vollständig gezeichnet und gefüllt ist. Dazu abonniere ich den Event "ColumnsPopulated" welcher geschmissen wird, wenn das Grid (devexpress component) gezeichnet wurde. Leider dauert das Abfüllen der Werte noch ein paar hunderstel Sekunden länger. Wie warte ich nun ab, bis alle Werte drin sind?

  1. Möglichkeit: UpdateLayout.. erzwingt ein force repaint synchron
        private void TranslationsGrid_ColumnsPopulated(object sender, RoutedEventArgs e)
        {
            // force repaint
            this.UpdateLayout();

            this.DoSomething();
        }
  1. Möglichkeit: DoEvents (macht etwas mit dem Dispatcher - da fehlt mir das nötige Wissen, um das erklären zu können - aber hier tummeln sich ja einige Profis 😉)
        private void TranslationsGrid_ColumnsPopulated(object sender, RoutedEventArgs e)
        {
             DoEvents();

            this.DoSomething();
        }

        public static void DoEvents()
        {
            if (Application.Current != null)
                Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { }));
        }

Wo liegen für euch die Vorteile der einen, bzw. anderen Lösung?

Gruss

Martin

PS: Beide Lösungen funktionieren

19.08.2010 - 10:52 Uhr

Hallo

Evtl. hilft euch die Lösung weiter: [gelöst] Aero Theme lässt Window schwarz werden

Gruss

Martin

19.08.2010 - 10:48 Uhr

Man kann die Hardware Acceleration auch für ein einzelnes Window ausschalten (remind: erst nach dem vollständigen Laden des Window kann der Code ausgeführt werden)

http://blogs.msdn.com/b/jgoldb/archive/2007/10/10/performance-improvements-in-wpf-in-net-3-5-3-0-sp1.aspx

Punkt 6

(Finds zwar noch immer doof das man arbeiten der GPU auf die CPU schmeisst, aber jänu.. es läuft so wenigstens)

[EDIT: Hab den Code hierher kopiert, falls die Page mal nicht mehr existieren sollte)]

        private void OnLoaded(object sender, EventArgs e)
        {
            if (ForceSoftware)
            {
                HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
                HwndTarget hwndTarget = hwndSource.CompositionTarget;

                // this is the new WPF API to force render mode.
                hwndTarget.RenderMode = RenderMode.SoftwareOnly;
              }
        } 
19.08.2010 - 08:48 Uhr

Laut MS ist es ein Grafikkartenproblem - wenn die GPU das ganze Bling Bling nicht mehr rechnen kann oder was weiss ich..

http://support.microsoft.com/kb/963021

Zu den Punkten 1-6: Verantwortung abschieben, dann einen hoffnungslosen Versuch vorschlagen und wenn das nicht geht, mal ein Logfile schicken und hoffen, dass sich ja jemand in den nächsten Jahren drum kümmert.. sie sorry aber äääh...

Kann ja nicht sein dass Millionen von Entwicklern da draussen alle die Aero Theme bei sich und den Kunden ausgeschaltet haben...

18.08.2010 - 12:47 Uhr

FluentRibbon lässt sich leider nicht schlau automatisiert Testen, darum hat bei der Ribbon Entscheidung MS Ribbon gewonnen..

Gibt es keinen (anderen) Workaround oder eine Lösung?

18.08.2010 - 11:39 Uhr

Hallo zusammen

Ich hab Win7, .net4 und ein WPF Window (MS Ribbon).
Habe ich Aero Theme eingeschaltet und starte meine Applikation, ist manchmal mehr, manchmal weniger des Window schwarz. Durch resizen (neu rendern) erscheint dann wieder das gewünschte Window Look&Feel.

Schalte ich die Aero Theme aus, funktioniert alles prächtig.

Gibts hierzu ein Workaround, wie das Fenster auch ohne neu Rendern und mit Aero Theme "normal" erscheint? Das Problem scheint ja seit Windows Vista (Aero) zu bestehen.

Die einzigen Lösungen im Netz - disable Desktop Composition und Aero Theme ausschalten - kann ich nicht machen, weil man den Kunden nicht vorschreiben kann, die Aero Theme auszuschalten..

Weiss jemand Rat?

Merci

Martin

17.08.2010 - 11:24 Uhr

Hallo herbivore

Vielen Dank für den Tipp mit dem $.

Für alle, die auf dieses Problem mal stossen:

Die Aufgabe: Ein Text darf XML Tags beinhalten. Wenn er XML Tags beinhaltet, dann einzig das translate-Tag.
Beispiele (aus meinen unit tests):
"Reiner Text" => gut
"prefix <translate>text</translate> suffix" => gut
"prefix <translate>text</translate>" => gut
"<translate>text</translate> suffix" => gut
"prefix <translate>text</translate><translate>text</translate> suffix" => gut
"prefix <translate>text</translate>asdf<translate>text</translate> suffix" => gut
"<a>a</a>" => nicht gut
"adf <b>a</b>" => nicht gut

Die Lösung:

            var tagRegex = new Regex(@"^[^<>]*([^<>]*(<translate>[^<>]*</translate>)[^<>]*)*$", RegexOptions.Compiled);

            if (tagRegex.IsMatch(this.value))
            {
                return "gut";
            }
      
            return "nicht gut";
17.08.2010 - 10:01 Uhr

Hallo herbivore

Vielen Dank für die Antwort. Ich hab die Regex jetzt mit dem + angepasst.

var tagRegex = new Regex(@"([^<>]*(<translate>[^<>]*</translate>))+", RegexOptions.Compiled);

Nun findet er den "<test>text</test>" Input string nicht mehr, was auch gut ist. Jedoch findet er mir keinen string, der nur Zeichen entält ("hallo welt") - ist auch erlaubt.

var tagRegex = new Regex(@"([^<>]*|(<translate>[^<>]*</translate>))+", RegexOptions.Compiled);

Diese findet mir zwar "hallo welt", aber auch wieder "<test>text</test>" - wegen dem "|"... Ich switche schon länger zwischen zwei Unit Tests - mal funktioniert der eine, dann wieder der ander 😦

17.08.2010 - 08:43 Uhr

Hallo zusammen

Wiedermal eine kleine Regex-Aufgabe, die mir zugetragen wurde. Ich verwende zusätzlich das Regex-Lab von herbivore (vielen Dank für das super Tool!!) aber ich sehe das Problem nicht.

Regex:

var tagRegex = new Regex(@"([^<>]*(<translate>[^<>]*</translate>))*", RegexOptions.Compiled);

Input: "<test>test text</test>"

if (tagRegex.IsMatch("<test>test text</test>"))
{
  return "gefunden";
}

Und da findet er mir immer was 😦 (das genaue problem: Wenn ein XML-Tag im Text vorkommt, dann darf nur "translate" drin stehen.. )

Weiss jemand Rat?

Merci

12.08.2010 - 10:59 Uhr

Hallo

Hier findest du die Antwort: http://10rem.net/blog/2010/08/02/announcing-microsoft-ribbon-for-wpf-rtw
"Our goal for this release was to address an enormous number of complaints regarding our licensing approach. We worked closely with the Office team to position our release in a way so that we no longer have to enforce the guidelines. The Office 2010 Fluent UI guidelines have not yet been released and implementing the backstage view, a feature unique to Office 2010, would not contribute to our goals. Our goal is to better align the two teams so we can address these concerns for future releases. This release is an RTW, but not the last of the Ribbon. We plan to move it into the WPF framework and better align with Office in order to stay in sync across both feature-set and schedule."

Saied und Pete sind MS Brüder - ich glaube, denen muss man glauben 😦

Gruss

PS: Der File-Button ist in Office 2010 nicht mehr mit einem Icon hinterlegt, sondern mit einem Text (im englischen O2010 steht da jetzt "File")

05.08.2010 - 13:47 Uhr

Auch wenns schon ein älterer Thread ist...

April ist vorbei und DELL hat noch keine SSD's im breiten Angebot. Ich habe mir letzte Woche eine Offerte erstellen lassen für eine DELL Kiste mit SSD - über 6k SFr. "Sie sorry, aber ääääääh..."

ich hab mir die Mushkin Callisto 120 GB SSD gekauft für 399.- bei Digitec - 5min Einbau, 5min Win7 x64 Installation, 5min Konfigurieren (BIOS)... die Kiste rennt wie blöd.

Ist zwar nicht mehr gespiegelt, aber die Sourcen sind ja eh in Subversion...

Falls jemand also noch auf nen Dell mit SSD wartet.. viel Spass

04.08.2010 - 09:37 Uhr

Vielen Dank für den Tip. Fluent haben wir auch getestet. Es bietet jedoch keine AutomatedProperties an und ist in sich auch nicht 100% konsistent was das Layout zum MS Ribbon angeht (der File Button ist nicht ganz bis an den Rand z.B.)

Jetzt bleibt nur zu hoffen, dass MS bald ein weiteres Update zum Ribbon bringt.

03.08.2010 - 10:31 Uhr

Erste Testergebnisse vom neuen MS WPF Ribbon:

  • Unter XP sieht das Sample ziemlich mies aus (siehe Bild)
  • Unter Win7 ist das Window schön - wie's sein sollte.
  • Backstage NICHT implementiert
  • File Button kann nur mit Bild, jedoch nicht mit Text versehen werden
  • Die Tabs können per ID (und nicht per Label) von UIAutomated Tests angesteuert werden
  • ApplicationMenu hat das 2007er Look&Feel

Hat es von euch schon jemand ausprobiert?

03.08.2010 - 07:49 Uhr

[EDIT=Moderator]Abgeteilt von Ribbon Lizenz[EDIT]

M$ hats endlich geschaft, eine neue Ribbon Version herauszugeben.

http://www.microsoft.com/downloads/details.aspx?FamilyID=2bfc3187-74aa-4154-a670-76ef8bc2a0b4&displaylang=en

Viel Spass damit - ich hab sie noch nicht getestet

30.07.2010 - 16:20 Uhr

😉 Es soll ein Konfigurationsfile für UIAutomated Tests ausglesen werden. Alle Elemente die nicht im Konfigfile sind, werden in den Tests nicht geprüft.

Je nach Kundenlösung entsteht so ein anderes Konfigurationsfile und je nachdem werden dann die einen Tests ausgeführt oder eben nicht. (das ist der Hintergrund zur ganzen Geschichte..) 😉

(n.b.: manchmal ists auch ein int statt ein string Value...)

Ich habs jetzt so gelöst:

public void Read() { 
...
this.GetValues("XmlElement1", ref check, ref value);
configuration.Check1 = check;
configuration.StringValue1 = value;

this.GetValues("XmlElement2, ref check, ref intValue);
configuration.Check2 = check;
configuration.IntValue2 = intValue;
...}

        private void GetValues(string elementName, ref bool check, ref string value)
        {
            check = this.xmlConfiguration.Element(elementName) != null;

            value = check ? this.GetValue(elementName) : string.Empty;
        }

        private void GetValues(string elementName, ref bool check, ref int value)
        {
            var val = string.Empty;

            this.GetValues(elementName, ref check, ref val);

            value = val == string.Empty ? 0 : int.Parse(val);
        }

        private string GetValue(string elementName)
        {
            return this.xmlConfiguration.Element(elementName).Value;
        }

30.07.2010 - 14:12 Uhr

zero_x: vielen Danke für den Artikel - das hat mir wiedermal in Erinnerung gerufen, dass ich viel mit C gearbeitet habe.. 😉

MarsStein: Das configuration-Objekt kann ich nicht übergeben, da je nach Xml-Element andere Properties gesetzt werden sollen (siehe Beispiel, *Element1 vs *Element2)

Ehrlich gesagt habe ich jetzt noch keinen Lösungsansatz...

30.07.2010 - 13:46 Uhr

Hallo zusammen

So funktionierts:

bool check;
string value;
this.SetValues("XmlElement1", out check, out value);
configuration.CheckElement1 = check;
configuration.ValueElement1 = value;

this.SetValues("XmlElement2", out check, out value);
configuration.CheckElement2 = check;
configuration.ValueElement2 = value;

private void SetValues(string elementName, out bool check, out string value)
{
  check = true;
  value = "some value";
}

Was ich möchte ist jedoch:


this.SetValues("XmlElement1", out configuration.CheckElement1, out configuration.ValueElement1);
this.SetValues("XmlElement2", out configuration.CheckElement2, out configuration.ValueElement2);

Da kommt die Fehlermeldung: Error 11 A property, indexer or dynamic member access may not be passed as an out or ref parameter XYReader.cs

Ich hab zur Zeit 10, in Zukunft gegen 100, vielleicht 1000 Element im Xml die so ausgelesen werden müssen. D.h. ob jetzt da 1 Zeile oder 3 pro Wert steht, ist ein Unterschied.

Mir ist bewusst, dass hier wahrscheinlich ein Designfehler vorliegt - nur seh ich weder den Designfehler, noch seh ich eine Lösung, wie man es als Einzeiler lösen kann.

Habt ihr Vorschläge?

Merci

23.07.2010 - 13:17 Uhr

Hallo zusammen

Hat von euch jemand schon eine Backstage View für das MS Ribbon Control gemacht?

Laut einer Aussage on Codeplex http://wpf.codeplex.com/wikipage?title=WPF%20Ribbon%20Preview scheint V1 nur Office 2007 like zu sein und die ganze Backstage-Geschichte kommt erst mit Office 2010. Dieselbe Person schreibt was von einem Backstage-Workaround, den mal selbst implementieren sollte. (irgendwann einmal soll ein 2010er service pack erscheinen, aber... )

21.07.2010 - 10:22 Uhr

Hast du's schonmal per Binding probiert? Also statt ToolTip="a" ToolTip="{Binding a}"?

Und wenn das dann noch nicht geht, evtl. noch ein PropertyChanged schmeissen.

20.07.2010 - 09:31 Uhr

Hallo

Ich denke, das hängt u.A. auch davon ab, wie stark ihr sonst kapselt.

Beispiel:
Dieselben Daten werden angezeigt

  • einmal nicht-editierbar für einen Guest-User
  • einmal editibar für den Admin

Hier könnte man ohne Probleme dasselbe VM und M verwenden, da die Properties dieselben sind. Hier gilt jedoch zu beachten, dass im Guest-Modus nur Getter und keine Setter gebraucht werden im VM - von dem Aspekt her gesehen müsste man zwei VM verwenden.

Bsp 2:
Unterschiedliche Daten werden angezeigt:

  • View 1: a, b, c, d, e
  • View 2: a, c

Hier würde ich ein VM1 erstellen, welches von VM2 abgeleitet ist und die Felder b, d, e zusätzlich definiert. Dito Model

Je nachdem, wie "sauber" und ccd euer restlicher Code ist, würde ich für's eine oder andere Entscheiden.. also für deine Argumentation oder für die deines Arbeitskollegen.

20.07.2010 - 08:38 Uhr

Steh ich völlig auf dem Schlauch oder löst ein gutes Injection-Framework die Probleme? (evtl. hab ich ja die Frage falsch verstanden, aber...)

Kennt jemand ninject? http://ninject.org/

Und das im Code eine eigene Klasse mit new erzeugt wird, gibts eigentlich nicht mehr - wird alles über Factorys erzeugt (welche der Klasse injected werden) und dann kann man alles auch viel leichter testen.

(wenn ich mehr infos dazu schreiben soll, fragt ruhig... da ich jedoch nicht sicher bin, ob ich die Problemstellung richtig verstanden habe, schreib ich mir nicht die Finger wund...)

13.07.2010 - 09:50 Uhr

Am Anfang haben wir die Tests auch von VS erstellen lassen... nach ca. 2 Tagen war dann schluss damit und wir haben alle von Hand erstellt.

Nachteile:

  • Mehr Schreibarbeit

Vorteile:

  • Namespace stimmt (musst du halt selbst den Ordner erstellen)
  • Es wird das getestet, was getestet werden soll, da ich die Tests von Grund auf selbst schreibe
09.07.2010 - 10:37 Uhr

Hast recht - habs getestet und es funktioniert wirklich nicht.

09.07.2010 - 08:27 Uhr

Gegenfrage: Wo liegt der Sinn, eine deutsche Anwendung zu haben, wo die Fehlermeldungen auf Englisch kommen? In der Regel sollte es doch so sein, dass die Fehlermeldungen in der Sprache kommen, in der auch die Anwendung läuft.

(System-/Framework-) Fehlermeldungen auf Deutsch versteht kein Mensch.

Falls es um abgefangene Exceptions mit eigenem Fehlerhandling geht - selbst geschriebene Fehlermeldungen sollten m.E. übersetzt werden. Bei den nicht abgefangenen Exceptions (via UnhandledExceptions) sollten m.E. auf Englisch sein.

PS: Nur so ein anderer Lösungsansatz (ein bisschen Hacky..): Wenn du nur die UnhandledExceptions auf Englisch haben möchtest, kannst du diese ja im Main der Applikation abonnieren. Dann vor dem Ausgeben die Default Language zwischenspeichern, auf englisch umstellen, Exception ausgeben und wieder auf die Default Language zurückstellen... Wie gesagt, ist ein hacky Ansatz aber so müsste es gehn....

EDIT: Funktioniert nicht!

07.07.2010 - 13:16 Uhr

Hallo michlG,

Merci für deine Antwort.

Schade, gibts keine bessere Lösung dafür. Ich habs jetzt mal mit einer relativen Verteilung (danke für den 2* Tipp) gelöst und hoffe, so meinen Chef ruhigstellen zu können. Ich hätte gehofft, dass sonstjemand dieses Problem auch schon gehabt und gelöst hätte...

Gruess

Martin

07.07.2010 - 10:46 Uhr

Hallo zusammen

Ich habe ein UserControl (im vereinfachten Beispiel als Window), welches ein paar Eingabefelder zur Verfügung stellt und zwei Listen Users und Product Functions (siehe Anhang).

Das beste Ergebnis erhalte ich mit dieser Konfiguration:

<Grid.RowDefinitions>
  <RowDefinition Height="Auto" />
  <RowDefinition Height="4" />
  <RowDefinition />
  <RowDefinition Height="4" />
  <RowDefinition />
</Grid.RowDefinitions>

So sind füllen die Listen immer die Hälfte des noch verfügbaren Platzes aus. Wenn im Users Teil nur 2 Einträge vorhanden sind, wird der Rand trotzdem um die hälfte des noch verfügbaren Platzes gezeichnet - kanns ja nicht sein.

Im angehängten Bild ist die Konfiguration:

<Grid.RowDefinitions>
  <RowDefinition Height="Auto" />
  <RowDefinition Height="4" />
  <RowDefinition Height="Auto" />
  <RowDefinition Height="4" />
  <RowDefinition Height="Auto" />
</Grid.RowDefinitions>

Ich glaube, einfachheitshalber stelle ich einfach meine Anforderungen auf:

  • Der Platz wird optimal ausgefüllt
  • Jedes Control kriegt die Hälfte des noch verfügbaren Platzes, wenn die Listen zu lange sind
  • Hat nur ein Control viele Einträge, kriegt es einfach den übrig gebliebenen Platz (d.h. hats nur 1 User, ist die User-Liste nur ca 20px hoch und die Product Functions können den Rest des Platzes beanspruchen.
  • Reicht der Platz für eine Liste nicht aus, enthält sie ein Scrollbalken.

Ich kriegs nicht hin - habt ihr Tipps? Konkrete Lösungsvorschläge?

Ich hab ein Beispielprojekt erstellt. Wenns jemand möchte, kann ich es gerne hochladen.

Merci

Martin

07.07.2010 - 09:25 Uhr

Meinst du ein Äquivalent zu string.Format(...);?

Dann schau dir den Post an...
http://stackoverflow.com/questions/541896/concatenate-strings-instead-of-using-a-stack-of-textblocks

06.07.2010 - 09:55 Uhr

Schon interessant zu wissen, wie andere Leute sich fit halten... was mir beim durchlesen der Beiträge aufgefallen ist, ist, dass ein unerwartet großer Anteil der Benutzer einer Sportart nachgehen, die sich deutlich von den üblichen Sportarten (z.B.: Fussball, Joggen, Fitness etc. ) abheben bzw. die nicht so verbreitet sind.

Ich würde mal behaupten, dass dies unter anderem an unserem Einkommen liegt. Kostet die Mitgliedschaft in einem Fussballclub in der Schweiz zwischen 100 und 250.- (so im gros), Joggingschuhe kosten auch um 200.-... dagegen kostet der Jahresbeitrag in einem Kampfkunstverein gut und gerne mal 800.- aufwärts... nicht jeder kann sich sowas leisten...

Ich war mal Volleyballtrainer, dann wurde die Volleyballstunde in Unihockey gewandelt (dort hab ich auch noch 6-8 Monate unterrichtet) und seit ein paar Jahren bin ich in einem Kampfkunstverein dabei.

Daneben bin ich Gleitschirmpilot, hab ein Paddelboot, fahre mit dem Fahrrad an den Bahnhof (3.6km und 160 Höhenmeter - abwärts ists jeweils schneller 😉 ), bin viel in der Natur, etc...

02.07.2010 - 10:12 Uhr

verwendetes Datenbanksystem: Xml

Hallo zusammen

Wenn ich ein XDocument speichere, wird automatisch die Xml-Signatur (utf-8) erstellt und wenn ich das Encoding in Notepad2 anschaue, ist "UTF-8 with Signature" aktiv. Soweit sogut. Ich verwende diese Xml Dokumente im MS Office als Ribbon-Definitionen. In Word klappt alles hervorragend, nur im PowerPoint erscheint die Meldung: "Error found in Custom UI Xml of .... Add-in for PowerPoint: Error Code 0xC00CEE04, Unrecognized input signature"

Im Netz find ich leider nur DB-Spezifische Infos dazu und mit dem Error Code kann mir Google auch nicht weiterhelfen.

Das Problem konnte ich lösen, wenn ich in Notepad2 das Encoding auf UTF-8 (statt UTF-8 with Signature) wechsle - ohne die Signatur im Xml zu entfernen!

Dann funktionierts auch in PowerPoint.

Nun meine Frage: Wie kann ich im Code sicherstellen, dass die Xml-Signatur zwar geschrieben wird, das Encoding jedoch "UTF-8" und nicht "UTF-8 with Signature" ist?

Meine Save-Methode (wegen Unit Tests ist sie in einer eigenen Klasse ausgelagert, damit das gemockt werden kann):
public void Save(XDocument xmlDocument, string path)
{
xmlDocument.Save(path);
}

Merci

29.06.2010 - 15:35 Uhr

Hast du Debugging eingeschaltet?

Word options => Advanced => (ganz runter scrollen) => Show add-in user interface errors

evtl. hilfts

28.06.2010 - 13:34 Uhr

Hallo zusammen

In letzter Zeit lese ich je öfters von agiler Softwareentwicklung (schnell auf Kundenbedürfnisse reagieren zu können etc..) nur hier im Forum findet man nichts darüber.

Was denkt ihr von agiler Softwareentwicklung? Pro/Contras für Entwickler und Auftraggeber? Hat agile Softwareentwicklung Zukunft oder ist/war es nur ein Hype? Was muss man beachten?

[EDIT:]In Bezug auf die "Unterform" SCRUM.[/EDIT]

28.06.2010 - 13:24 Uhr

Mit Resharper lässt sich eine Typänderung auch im Nachhinein sehr einfach durchführen.

In unserer Firma entwickeln wir (soweit möglich und gemäss unserem aktuellem Wissenstand - man lernt nie aus.. 😉 ) Agil. Eine solche Aufgabe würden wir bestimmt als Liste implementieren, da der aktuelle Stand keine ObservableCollection voraussetzt. Wird dies dann irgendwann wirklich gebraucht, lässt es sich schnell ändern (agil). So vermeidet man unzählige Code-Leichen, wenn etwas dann doch nicht gebraucht wird, aber trotzdem vorsorglich implementiert wurde.

28.06.2010 - 13:19 Uhr

Ich glaube, das folgende Argument (pro) TDD ist bislang noch nicht erwähnt worden:

  • Man kann sicherstellen, dass der Code so verwendet wird, wie es zur Designzeit gewünscht ist.

... dann schreibe ich einen Test dafür und wenn jemand meinen Code ändert, failed ein Test. Dann muss er zumindest diesen auch noch anpassen und überlegt sich vielleicht, ob seine Änderung überhaupt sinnvoll ist, wenn dafür speziell ein Test existiert, der dies verhindert...

(ich hoffe, ich hab mich genug deutlich ausgedrückt 😉 )

23.06.2010 - 07:58 Uhr

Also wenn du eine Alternative zu SVN suchst, wird GIT dir eventuell weiterhelfen.

Visual Source Safe wird ja seit Jahren nicht mehr weiterentwickelt (soweit ich weiss) und CVS ist der Vorgänger von SVN und somit eigentlich auch nicht zu empfehlen.

Zu den SVN Clients und Server wurde ja schon genug geschrieben, muss ich nicht auch noch...

22.06.2010 - 09:58 Uhr

Vorteil für ein gut getestetes System: Man kann am Abend nach Hause gehen und es lässt einen besser schlafen. Man weiss, dass alle Tests fehlerfrei durchlaufen und somit keine Fehler zu erwarten sind.

Wenn im Markt ein Fehler auftritt, kann dieser einfach mit einem Test nachgebildet werden. Dann wird der Code korrigiert und der Test erfüllt => Dieser Bug wird nie mehr auftreten, da es dafür jetzt einen Test gibt.

22.06.2010 - 08:34 Uhr

Hallo Lector

Vielen Dank für den Link. Ich werde mir die Seite mal genauer anschauen.

Wenn ich eine Lösung habe, die gepostet werden kann (je nachdem wieviel geschäftsinterne Businesslogik im Code herumschwirrt), werde ich sie hier posten.

21.06.2010 - 10:55 Uhr

Hallo zusammen

Ich will ein Drag&Drop auf einem TreeView realisieren. Hier mal ein möglicher Baum (in Klammer der Typ):

  • a (A : IElementWithChildren)

    • b1 (B : IElement)
    • b2 (B : IElement)
    • C1 (C : IElementWithChildren (was natürlich : IElement))
      • b3 (B : IElement)
      • b4 (B : IElement)
      • b7 (B : IElement)
      • b5 (B : IElement)
      • b6 (B : IElement)
      • C2 (C : IElementWithChildren (was natürlich : IElement))
        • b2 etc...
  • Nun sollte es möglich sein, b5 zwischen b1 und b2 zu schieben.

  • b3 soll zwischen b5 und b6 geschoben werden können

  • C1 soll zwischen b1 und b2 geschoben werden können

=> Die Elemente sollten also innerhalb einer Tree-Ebene und zwischen TreeEbenen verschoben werden können (so wie der Baum aufgebaut werden kann)

Jegliche Implementationen aus dem Web die ich bis jetzt gefunden habe unterstützen nur das verschieben zwischen verschiedenen Stufen und nicht innerhalb einer TreeView-Ebene (was ja eigentlich eine liste wäre..?!?)

http://www.codeproject.com/KB/WPF/WpfDragAndDropSmorgasbord.aspx Dieses Beispiel wiederspiegelt in etwa meine Bedürfnisse, ausser dass die Children nicht zwingend als Subnode eingefügt werden müssen, sondern auch umsortiert werden können.

Ich kann mir nicht vorstellen, dass noch niemand dasselbe Problem hatte und es nicht als Tutorial ins Netz gestellt hat 😦

Hat mir jemand Tipps wie ich das angehen könnte? Hilfreiche Links?

21.06.2010 - 08:58 Uhr

"... und wenn jemand eine andere Meinung hat als ich, dann setzen wir uns zusammen und diskutieren so lange, bis alle meiner Meinung sind!"

Situation: 2 Frameworks stehen zur Auswahl. Es muss bestimmt werden, welches Framework gewählt wird.
Die Entwickler stellen zu jedem Framework Pros und Contras auf. Dann wird zusammengesessen und diskutiert, bis auch die Vorgesetzten die Meinung der Entwickler sind.

Schlussendlich muss der Chef sagen, welches Framework genommen wird. Er muss jedoch das selbe Framework wie die Entwickler wählen, oder sonst muss noch länger diskutiert werden.

Ein guter Chef zeichnet sich auch dadurch aus, dass er die Meinungen und Wünsche der Entwickler respektiert und gegen aussen diese auch so vertritt.

(:::