Laden...

Forenbeiträge von raketenhund Ingesamt 38 Beiträge

28.02.2014 - 10:03 Uhr

Hallo nochmal,

nach zwei Tagen hat mein Visual Studio die Lizenz korrekt aktualisieren können.

Es funktioniert nun alles wie erhofft 😃

Grüße

26.02.2014 - 11:35 Uhr

Hallo zusammen,

ich habe gestern gesehen, dass es mit VSO-Professional die Möglichkeit geben soll, zu einem für Hobbyentwickler geeigneten Preis, Visual Studio 2013 Professional zu mieten. Natürlich gibt es noch weitere feine Sachen in dem Paket dazu, mich interessiert jedoch hauptsächlich die IDE um für Win 8 und WP8 gleichzeitig entwickeln zu können.

Nun habe ich über meinen Live-Account mich für Windows-Azure freischalten lassen und glatt einen Testaccount für 28 Tage mit 150€ Guthaben erhalten. Daraufhin habe ich einen Professional-Account für VSO hinzugebucht und im VSO-Portal meiner Live-ID die Professional-Lizenz zugeordnet.

Wenn ich dann sage, dass ich VS herunterladen will, wird mir auch die Professional-Variante vorgeschlagen. Also habe ich diese installiert, innerhalb von VS mit meiner Live-ID angemeldet und über "Info über MS VS" --> "Informationen zur Produktlizenz" bekomme ich zu meiner Verwunderung angezeigt, dass ich eine 30-Tage-Testversion (nur zu Testzwecken) zur Verfügung habe. Erwartet hätte ich, dass ich eine 30-Tage-Lizenz habe, der Text "Nur zu Testzwecken" hält mich momentan davon ab, meinen Azure-Testaccount in einen bezahlten zu wandeln.

Es gibt also zwei Möglichkeiten:

  1. Da mein Azure-Zugang zur Zeit ein Testaccount ist, wird dies in VS auch entsprechend dargestellt
  2. Die Synchronisierung der Lizenz funktioniert nicht richtig

Daher meine Frage: Hat jemand von euch bereits Erfahrungen mit VSO-Professional und funktioniert dort die Lizenzsynchronisierung? Auch wenn es nur um etwas um die 20€ geht, möchte ich die ungern in den Sand setzen, nur weil irgendwas nicht funktioniert oder anders als ich es mir vorgestellt hatte 😃

Hier nochmal eine kurze Zusammenfassung:

  • Azure Account: Testaccount mit 150€ Guthaben und 28 Tagen Gültigkeit
  • Eine Professional-Lizenz für VSO über Azure hinzugebucht
  • VSO-Account: Early Adopter
  • Dem VSO-Benutzer zugewiesene Lizenz: Professional
  • Lizenz laut VS 2013 (auch nach Lizenzupdate via "Nach einer akt. Lizenz suchen"): 30 tägige Testlizenz

Grüße vom raketenhund

04.01.2014 - 14:01 Uhr

Hallo zusammen,

ich sitze gerade vor dem folgenden Szenario in einer Windows Phone 8 App:

    public class ClassB
    {
        public string Name { get; set; }
    }

    public class ClassA
    {
        public List<ClassB> Items { get; set; }    
    }

Klasse A (ClassA) beinhaltet eine List von Klasse B (ClassB). Klasse A wird per XmlSerializer gespeichert und wieder geladen. Dies ist dann das Ergebnis:

<ClassA>
	...
	<Items>
		<ClassB>
			<Name>qwe</Name>
		</ClassB>
		<ClassB>
			<Name>rtz</Name>
		</ClassB>
	</Items>
	...
</ClassA>

Nun habe ich ClassB in ClassBNew umbenannt. Per XmlRootAttribute hätte ich zwar die Möglichkeit bei der Serialisierung eines einzelnen ClassBNew Objekts zu sagen, dass es weiterhin im XML ClassB heißt, jedoch scheint das nicht zu funktionieren, wenn ich ClassA deserialisieren möchte.

    [XmlRoot("ClassB")]
    public class ClassBNew
    {
        public string Name { get; set; }
    }

Ich muss die Funktionalität für bestehende Installation weiterhin garantieren, trotz der geänderten Klassenbezeichnung.

Weiß jemand, wie ich den Inhalt der Auflistung wieder deserialisieren kann, obwohl die eigentliche Klasse umbenannt wurde?

Grüße vom raketenhund

EDIT:
Ich war scheinbar zu blöd zum suchen. Die Lösung ist ganz einfach. Die List benötigt einfach noch das XmlArrayItemAttribute:

    public class ClassBNew
    {
        public string Name { get; set; }
    }

    public class ClassA
    {
        [XmlArrayItem("ClassB")]
        public List<ClassBNew> Items { get; set; }    
    }

Thema hat sich damit erledigt.

01.11.2013 - 11:52 Uhr

Hallo zusammen 😃

Ich versuche mich gerade wieder mal ein wenig am WP8 LongListSelector und wollte diesen um Commands erweitern. Mir ist dabei aufgefallen, dass weder das Tap, noch das SelectionChanged-Event ausgeführt werden.

Hier das XAML (habe es auf das mindeste Reduziert):

<phone:PhoneApplicationPage
...
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
...
    shell:SystemTray.IsVisible="True"
    DataContext="{Binding VM, RelativeSource={RelativeSource Self}}">    

...

<phone:LongListSelector ItemsSource="{Binding Items}" Tap="mydata_Tap" SelectionChanged="mydata_SelectionChanged" />

Im Hintergrund wird lediglich mein ViewModel mit ein paar Testdaten gefüllt und die werden auch korrekt angezeigt. Zuvor hatte ich noch ein ItemTemplate hinterlegt, welches ich zum Test entfernt habe. In den jeweiligen Events lasse ich lediglich Messages ausgeben.

Habe ich etwas vergessen oder werden diese Events gar nicht unterstützt?

Gruß,
Daniel

EDIT:
Ich weiß nicht was ich falsch gemacht habe, jedoch habe ich nun das ItemTemplate wieder eingefügt und plötzlich wird das Event aufgerufen. Sollte ich die Ursache finden, würde ich noch mal schreiben.

23.10.2013 - 14:04 Uhr

Da du ja in deiner Testklasse die Dispose Funktion implementieren musst, kannst du einfach in dieser alle anderen sich innerhalb des Test-Klasse befindenen Objekte disposen.

23.10.2013 - 14:01 Uhr

Ich persönlich habe es in meinen Settings ohne LongListSelector erledigt. Ich verwende ihn zwar an anderen Stellen, aber für die Settings fand ich ihn tatsächlich übertrieben.

Es kommt jedoch auch darauf an, wie du deine Settings darstellst. Ich habe ein paar Checkboxen und einen Button. Da müsste man die Darstellung daran anpassen, was man gerade darstellen möchte und entsprechend unterschiedliche Controls anzeigen. Da du jedoch eine Settings-View machen willst, wie es bspw. in den WP8 Einstellungen der Fall ist, dass du also von einem Punkt aus in eine andere View kommst, macht ein LongListSelector schon wieder mehr Sinn, da du mit klitzekleinen Anpassungen im Quelltext bzw. der Datenquelle neue Einträge hinzufügen kannst.

03.08.2013 - 06:56 Uhr

Guten Morgen zusammen!

Ich stehe gerade vor dem folgendem Problem:
Meine Windows Phone 8 Anwendung ist lokalisiert. Ich habe bspw. einen string FirstStartInfo mit dem Text: "This is the first start of {0}. Please check the settings:". Der Placeholder soll durch den Anwendungsnamen (ApplicationTitle) ersetzt werden.

<TextBlock Text="{Binding Path=LocalizedResources.FirstStartInfo, Source={StaticResource LocalizedStrings}}" Style="{StaticResource PhoneTextTitle2Style}" TextWrapping="Wrap" />

Ist es möglich diesen Placeholder direkt im XAML füllen zu lassen, oder komme ich um Code Behind nicht herum?

Grüße vom raketenhund

04.05.2013 - 13:24 Uhr

Danke für den Hinweis. Jemand hat versucht mir das Muster zu erklären, scheinbar hab ich da doch noch einiges missverstanden. Ich werde mir das nochmal genauer ansehen und es dann anpassen.

Jedoch würde ja auch nach o.g. Anpassung das Problem bestehen bleiben, oder irre ich mich da?

03.05.2013 - 20:39 Uhr

verwendetes Datenbanksystem: SQLCE per LINQ2SQL auf WP8

Guten Abend zusammen 😃

Ich stehe zur Zeit vor folgendem Problem:
Ich habe in meinem Controller ein statisches Item-Objekt. Dieses Item hat als Primary Key den EAN Code. Darüber hinaus sind noch ein paar weitere Properties wie Beschreibung u.ä. enthalten.

Dem User werden in der View die Daten präsentiert. Hier hat er die Möglichkeit, die Daten in die Datenbank zu übernehmen (SaveInDatabase), oder sie zu löschen (RemoveFromDatabase).

Fügt der User den Datensatz ein und löscht ihn unmittelbar danach wieder, erhalte ich die folgende Meldung: > Fehlermeldung:

Cannot add an entity that already exists.

Ich habe unter anderem gelesen, dass hier stets ein neues Objekt erzeugt werden sollte, welches an die InsertOnSubmit, sowie DeleteOnSubmit Funktion übergeben wird. Das löst mein Problem leider nicht (wie man unten im Code erkennen kann).

        public static void SaveInDatabase()
        {
            ViewModels.ItemViewModel newEntry = new ViewModels.ItemViewModel();
            newEntry.EAN = currentItem.EAN;
            newEntry.Description = currentItem.Description;
            newEntry.Rating = currentItem.Rating;

            context.Items.InsertOnSubmit(newEntry);
            context.SubmitChanges();

            newEntry = null;

            if (null != OnDatabaseInsertDone)
                OnDatabaseInsertDone(null, currentItem);

        }

        public static void RemoveFromDatabase()
        {
            ViewModels.ItemViewModel newEntry = new ViewModels.ItemViewModel();
            newEntry.EAN = currentItem.EAN;
            newEntry.Description = currentItem.Description;
            newEntry.Rating = currentItem.Rating;

            context.Items.DeleteOnSubmit(newEntry);
            context.SubmitChanges();           

            if (null != OnDatabaseDeleteDone)
                OnDatabaseDeleteDone(null, currentItem);
        }

Hier noch ein Auszug meines ViewModels:

namespace My_Items.ViewModels
{
    [Table]
    public class ItemViewModel : INotifyPropertyChanged
    {
        private string _ean = string.Empty;

        [Column(IsPrimaryKey = true, IsDbGenerated = false, CanBeNull = false, AutoSync = AutoSync.Default)]
        public string EAN
        {
            get
            {
                return _ean;
            }
            set
            {
                bool eanInvalid = string.IsNullOrWhiteSpace(value);
                eanInvalid = eanInvalid || value.Length != 13;

                if (!eanInvalid)
                {
                    int sum = 0;
                    int currentDigit = 0;
                    int csum = 0;

                    for (int i = value.Length - 1; i >= 1; i--)
                    {
                        currentDigit = int.Parse(value.Substring(i - 1, 1));
                        if (i % 2 == 0)
                            sum += currentDigit * 3;
                        else
                            sum += currentDigit;
                    }

                    csum = (10 - (sum % 10)) % 10;

                    eanInvalid = csum != int.Parse(value.Substring(value.Length - 1, 1));
                }
                if (eanInvalid)
                    throw new ArgumentException(string.Format("Der angegebene EAN Code ist ungültig: \"{0}\"", value), EAN);

                _ean = value;

                RaisePropertyChanged();
            }
        }

        string _name = string.Empty;
        [Column]
        public string Name
        {
            get { return _name; }
            set { _name = value; RaisePropertyChanged(); }
        }

        string _description = string.Empty;
        [Column]
        public string Description
        {
            get { return _description; }
            set { _description = value; RaisePropertyChanged(); }
        }

        /*public override bool Equals(object obj)
        {
            var item = obj as ItemViewModel;

            if (item == null)
                return false;

            return this.EAN.ToUpper() == item.EAN.ToUpper();
        }*/

        /*public override int GetHashCode()
        {
            return this.EAN.GetHashCode();
        }*/

        public event PropertyChangedEventHandler PropertyChanged;
        void RaisePropertyChanged([CallerMemberName]string Caller = "")
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(Caller));
        }
    }
}

Wie man sieht, hatte ich zuvor die Equals und GetHashCode Funktionen überschrieben. Das habe ich zu Testzwecken aufgrund dieses Threads wieder raus genommen: Mehrere Einträge in DB eintragen (InsertOnSubmit)

Warum lässt sich ein gelöschter Eintrag direkt danach nicht wieder einfügen? Wer hat Rat für mich? 😃

Vielen Dank schonmal 😃

15.02.2013 - 07:58 Uhr

Hallo Geaz,

ich habe das Programm mal runtergeladen und optisch ist es schonmal sehr ansprechend 😃

Mir ist jedoch gleich der ein oder andere Punkt aufgefallen:*Könnte das Programm nicht den Großteil der Daten für "Allgemeine Einstellungen" aus der Projektdatei ziehen? *Bei einem Projekt ist eine "System.UnauthorizedAccessException" aufgetreten. Die Meldung habe ich jedoch erst im Logfile gesehen. Die Anwendung gibt hierzu keine Infos, weshalb ich erstmal eine Weile gewartet habe. Der User sollte die Info erhalten, dass hier ein Fehler aufgetreten ist, evtl. mit dem Verweis auf das Logfile. *Ein anderes Projekt funktionierte, jedoch wäre es nicht schlecht, wenn man eine Info darüber erhalten könnte, welche Datei er gerade parsed oder erstellt, damit (gerade bei großen Projekten) der User weiß, was und vor allem, dass das Programm noch etwas macht. *Die erstellte Dokumentation (Top-Layout!!) ist leider im IE nicht nutzbar. Nach zwei bis drei Klicks passiert garnichts mehr. Ich kann keinen Punkt mehr anwählen, nur noch die Seite neu laden. Daraufhin tritt wieder das gleiche Phänomen auf. IE Version: 9.0.8112.16421 - Dieses Problem scheint nur bei der Darstellung von Klassen aufzutreten. Blättere ich durch die Namespaces, funktioniert alles. Sobald eine Klasse angewählt wurde, "friert" die Seite ein. *Zur besseren Übersicht wäre es sicherlich hilfreich, wenn noch Zeitangaben im Logfile vorhanden wären

Ich würde das Programm liebend gerne benutzen, würde ich es denn auch im IE nutzen können. 😃

EDIT: Das gleiche Problem mit dem einfrieren der Seite habe ich auch auf deiner Projektseite. Sobald ich mir eine Klasse in deiner Dokumentation ansehen möchte, steht die Seite.

Grüße vom raketenhund!

06.02.2013 - 11:03 Uhr

@dN!3L:
Hmmmmm, das gibt zu denken 😃

Ich bin grad etwas überrascht und weiß nicht mehr was ich dazu schreiben soll. Das ist schon wieder viel zu einfach 😃

Vielen Dank auf jeden Fall für den Hinweis. Wenn man sich derartiges mal angewöhnt und dann zur Vorsicht nochmal mit dem ein oder anderen Sonderzeichen (wie dem im Beispiel genannten Punkt) versieht, sollte man schon auf einer recht sicheren Seite sein. Das macht dann solche Tools auch in gewisser Weise überflüssig.

@mabo
Selbstverständlich könnte man sich auch etwas selbst zusammenstellen. Lerneffekt wäre natürlich auch dabei, wobei das für mich nicht derart interessant ist, dass ich dafür etwas selbst entwerfen würde. Mir würde hierzu die Motivation fehlen, da ich, wie oben bereits geschrieben, solchen Tools (ob selbst geschrieben oder anderer Anbieter) recht kritisch gegenüber stehe.

Ich merke mir die Passwörter lieber und verwende ein paar wenige "sichere", als alle in einem Tool zu hinterlegen.

@schlumpf2009
Gut, dass mit den Apps fürs Handy wusste ich nun nicht. Wie werden denn die Daten synchronisiert? Nimmst du dafür einen eigenen Server oder etwas wie DropBox/SkyDrive oder wird das von KeePass auf deren Server hochgeladen?

Vor allem: Wieviele Passwörter hast du denn, dass du hierfür ein extra Tool benötigst? Nutzt du für jede Website ein eigenes? (wenn ich mal so dreist fragen darf?)

06.02.2013 - 09:58 Uhr

Guten Morgen alle zusammen 😃

Ich habe kürzlich einen News-Beitrag über eine Software Namens KeePass Password Safe gelesen. Diese Software ermöglicht es, Passwörter zu speichern und mit einem "Master-Passwort" abzusichern. Persönlich stehe ich solcher Software stets kritisch gegenüber. Ich habe einfach ein unwohles Gefühl dabei, wenn mir eine Software alle meine Passwörter im Klartext darstellen kann, auch wenn ich dafür ein sicheres "Master-Passwort" eingeben muss.

Ich persönlich verwende etwa sieben verschiedene Passwörter. Je nach Sicherheitsanforderung (bspw. Facebook/E-Mails) eine Mischung aus Groß-/Kleinbuchstaben, Sonderzeichen und Zahlen, oder aber bspw. für Foren in etwas abgeschwächter Form.

Wenn ich mir nun ein solches Tool zulegen würde, hätte ich die Daten an zentraler Stelle, bspw. Heim-PC. Bin ich an der Arbeit oder bei Freunden und möchte mich irgendwo einloggen, habe ich keine Möglichkeit die eventuell extrem sicher gestalteten Passwörter einzusehen.

Geht mir die Platte kaputt, hab ich ggf. einen Passwortverlust. Ok, nahezu alle Seiten beiten eine Passwort-Zurücksetzen Funktion, aber was ist mit Zugängen, die diese Funktion eben nicht bieten, bspw. Bankprogramme? Mache ich ein Backup dieser Passwort-Datei, habe ich sie schon nicht mehr zentral an einer Stelle, sondern schon auf mindestens einer weiteren, was einen "Diebstahl" wieder erleichtern könnte (eher weniger im Privaten als im Geschäftsbereich).

Wie sieht es aus mit der Sicherheit solcher Programme und wie steht ihr dazu?

Lg vom raketenhund 😃

18.10.2012 - 10:45 Uhr

Hallo Al,

mein erster Google-Versuch mit "anzeige klonen c#" brachte mich auf folgende Seite:
How do I enable a second monitor in C#

In der Antwort von Pop Catalin ist das ganze eigentlich ziemlich gut erklärt. Wenn du also eine "anständige" Lösung willst, wirst du um P/Invoke nicht drum herum kommen.

Wenn du Windows 7 hast und dir "quick & dirty" ausreicht, kannst du sicherlich auch die Methode von sevenalive nutzen.

26.09.2012 - 16:38 Uhr

Danke dennoch für eure Mühe! Ich werde dann mal weiter forschen 😃

Sollte ich etwas zu dem Problem finden, werde ich es hier nochmal posten, sofern das ok ist.

26.09.2012 - 15:45 Uhr

Hallo herbivore,

deine beiden Beispiele werden einwandfrei dargestellt. Die Bilder aus meinen Posts sind weg, während die beiden von dir erhalten bleiben.

26.09.2012 - 15:21 Uhr

Hallo zusammen,

ich habe es jetzt außerdem mit Chromium probiert. Problem bleibt erhalten. Im Firefox läuft es, wie auch im IE einwandfrei.

Proxy ist mir keiner bekannt. Cache wurde schon etliche male geleert.

Im Regex-Lab-Thread werden die Bilder nach der Zeit auch entfernt. Ich kann das Laden der Seite abbrechen, dann bleiben die Bilder sichtbar. Lasse ich die Seite zu Ende laden, werden die Bilder entfernt. Klingt schon sehr verdächtig nach Script, aber in Chromium und Chrome? Außerdem werden mir keine Scripts / Extensions angezeigt 😦

Nebenbei danke auf jeden Fall für eure Mühen!!

26.09.2012 - 14:49 Uhr

Hallo gfoidl,

danke für deine Antwort. Es scheint teilweise auch auf anderen wbb2-Seiten aufzutreten. WireShark gab mir den Status HTTP/1.1 200 OK.

Ich werde jetzt einfach mal versuchen, Chrome neu zu installieren.

EDIT: Auch eine Neuinstallation hat leider nichts gebracht. Habe auch den Inkognito Modus ausprobiert, falls nicht doch noch irgendwo eine deinstallierte Erweiterung rumlungert und der Meinung ist, die Bilder rauswerfen zu müssen.

Bisher ohne Erfolg.

Was mir noch auffällt: Obwohl die Seite komplett geladen wurde, zieigt Chrome noch den "Ladekreis" an.

Tjoa, wenn es bei anderen funktioniert, lediglich bei mir nicht, dann weiß ich auch nicht mehr weiter 😉

Ich hab nun noch mit den Entwicklertools gespielt und die Timeline zeigt mir, dass das Laden der attachment.php etwas mehr als 16 Sekunden dauert (die beiden langgezogenen blauen Balken unten).

Danke an den Mod für das Zusammenführen der beiden Beiträge und: Entschuldigung für zwei Postings 😃

26.09.2012 - 14:19 Uhr

Solange die Seite neu lädt, wird das Bild dargestellt. Erst wenn die Seite fertig geladen wurde, kommt der Placeholder.

Links auf dem Bild siehst du die Version, wenn die Seite geladen wird, rechts wenn die Seite fertig geladen wurde.

26.09.2012 - 12:48 Uhr

Hallo mycsharp-Team,

seit einiger Zeit scheint es ein Problem bei der Darstellung von Bildanhängen mit Google Chrome zu geben. Sobald die Seite noch nicht vollständig geladen wurde, werden mir die Bilder die als Anhang einem Post hinzugefügt wurden, dargestellt. Ist Chrome fertig mit dem Laden der Seite, sehe ich nur noch einen Placeholder anstelle des Bildes. Klicke ich auf "Volle Bildgröße", wird das Bild korrekt im neuen Tab dargestellt.

Im Internet Explorer konnte ich das Problem nicht nachvollziehen.

Ich verwende die Chrome Version 22.0.1229.79 m. Es sind keine Erweiterungen installiert. Die Einstellungen müssten weitestgehend auf Standard stehen. Die Entwicklerkonsole von Chrome meldet: "Failed to load resource". Eine Suche per Google brachte meist Ergebnisse, dass einige Erweiterungen ein solches Problem verursachen könnten, aber wie bereits geschrieben, ich habe keine Erweiterungen installiert.

Als Beispiel habe ich mal einen Screenshot beigefügt (auch wenn ich ihn später selbst nicht sehen kann 😉 ).

Ist euch das Problem bereits bekannt?

15.08.2012 - 14:29 Uhr

Danke dir für den Hinweis!

Dadurch bin ich darauf gekommen, den WindowStyle auf ToolWindow zu setzen, sobald das Window minimiert wird. Beim Wiederherstellen aus der Systray setze ich den Style wieder zurück auf SingleBorderWindow. In der Funktion "HandleStateChanged" musste ich lediglich eine weitere Zeile einfügen.

Aus dem Block...:

            // Show/hide Window and NotifyIcon
            bool minimized = _window.WindowState == WindowState.Minimized;
            _window.ShowInTaskbar = !minimized;
            _notifyIcon.Visible = true;

...wurde:

            // Show/hide Window and NotifyIcon
            bool minimized = _window.WindowState == WindowState.Minimized;
            _window.ShowInTaskbar = !minimized;
            _window.WindowStyle = minimized ? WindowStyle.ToolWindow : WindowStyle.SingleBorderWindow;
            _notifyIcon.Visible = true;

Vielen Dank nochmal!

15.08.2012 - 10:54 Uhr

Guten Morgen allerseits!

Ich habe eine Anwendung, die sich in die Systray minimiert und aus der Taskleiste verschwindet. Soweit alles kein Problem.

Zur Laufzeit wird je nach Einstellung ShowInTaskbar gesetzt. Die Anwendung verschwindet einwandfrei, im Systray befindet sich ein Icon, jedoch sehe ich die Anwendung nach wie vor in der "ALT+TAB"-Übersicht.

Ist jemandem dieses Problem bekannt bzw. wie kann dieses "Problem" umgangen werden?

Ich eine angepasste Version des MinimizeToTray-Beispiels von David Anson (Get out of the way with the tray ["Minimize to tray" sample implementation for WPF])

Mein Code zum minimieren ist der folgende:

    /// <summary>
    /// Class implementing support for "minimize to tray" functionality.
    /// </summary>
    public static class MinimizeToTray
    {
        private static MinimizeToTrayInstance minimzer;

        /// <summary>
        /// Enables "minimize to tray" behavior for the specified Window.
        /// </summary>
        public static void Enable(Window window)
        {
            // No need to track this instance; its event handlers will keep it alive
            if (minimzer == null)
                minimzer = new MinimizeToTrayInstance(window);
            else
                minimzer.RegisterStateChanged();
        }

        /// <summary>
        /// Disables the "minimize to tray" behavior
        /// </summary>
        public static void Disable()
        {
            if (minimzer != null)
                minimzer.UnregisterStateChanged();
        }        
    }

    /// <summary>
    /// Class implementing "minimize to tray" functionality for a Window instance.
    /// </summary>
    internal class MinimizeToTrayInstance
    {
        /// <summary>
        /// The window
        /// </summary>
        private Window _window;

        /// <summary>
        /// The systray notifyicon
        /// </summary>
        private NotifyIcon _notifyIcon;

        /// <summary>
        /// Is set when the application displays a balloontip for the first time so it is only displayed when the window is minimized for the first time
        /// </summary>
        private bool _balloonShown;

        /// <summary>
        /// Initializes a new instance of the MinimizeToTrayInstance class.
        /// </summary>
        /// <param name="window">Window instance to attach to.</param>
        public MinimizeToTrayInstance(Window window)
        {
            Debug.Assert(window != null, "window parameter is null.");
            _window = window;
            RegisterStateChanged();
            HandleStateChanged(null, new EventArgs());
        }

        /// <summary>
        /// Adds an eventhandler to the windows StateChanged event so we get notified if the windows state has changed in our class
        /// </summary>
        internal void RegisterStateChanged()
        {
            _window.StateChanged += new EventHandler(HandleStateChanged);
        }

        /// <summary>
        /// Removes the previously registered StateChanged event handler
        /// </summary>
        internal void UnregisterStateChanged()
        {
            if (_window != null)
                _window.StateChanged -= HandleStateChanged;
        }

        /// <summary>
        /// Handles the Window's StateChanged event.
        /// </summary>
        private void HandleStateChanged(object sender, EventArgs e)
        {
            if (_notifyIcon == null)
            {
                // Initialize NotifyIcon instance "on demand"
                _notifyIcon = new NotifyIcon();
                _notifyIcon.Icon = Icon.ExtractAssociatedIcon(Assembly.GetEntryAssembly().Location);
                _notifyIcon.MouseDoubleClick += new MouseEventHandler(HandleNotifyIconOrBalloonClicked);
                _notifyIcon.BalloonTipClicked += new EventHandler(_notifyIcon_BalloonTipClicked);

                // Create the notify-icon context menu
                ContextMenu _menu = new ContextMenu();
                MenuItem _item = new MenuItem("Beenden");
                _item.Click += new EventHandler(ClickQuit);
                _menu.MenuItems.Add(_item);
                _notifyIcon.ContextMenu = _menu;
            }

            // Update copy of Window Title in case it has changed
            _notifyIcon.Text = _window.Title;

            // Show/hide Window and NotifyIcon
            bool minimized = _window.WindowState == WindowState.Minimized;
            _window.ShowInTaskbar = !minimized;
            _notifyIcon.Visible = true;

            // Display baloon tip if required
            if (minimized && !_balloonShown && Properties.Settings.Default.NoticeOnSystray)
            {
                // If this is the first time minimizing to the tray, show the user what happened
                _notifyIcon.ShowBalloonTip(1000, null, "Die Anwendung wurde in den Systray-Bereich minimiert. Klicken Sie auf das Symbol um die Anwendung in den Vordergrund zu holen.", ToolTipIcon.Info);
                _balloonShown = true;
            }
        }

        /// <summary>
        /// Gets executed when the user clicks on the balloon tip to hide it
        /// </summary>
        void _notifyIcon_BalloonTipClicked(object sender, EventArgs e)
        {
            _notifyIcon.BalloonTipText = "";
        }

        /// <summary>
        /// Gets executed when the user clicks the Quit-Button on the context menu of the notifyicon
        /// </summary>
        void ClickQuit(object sender, EventArgs e)
        {
            App.CloseForcedByUser = true;
            _notifyIcon.Dispose();
            App.Current.MainWindow.Close();
        }

        /// <summary>
        /// Handles a click on the notify icon or its balloon.
        /// </summary>
        /// <param name="sender">Event source.</param>
        /// <param name="e">Event arguments.</param>
        private void HandleNotifyIconOrBalloonClicked(object sender, EventArgs e)
        {
            // Restore the Window
            _window.WindowState = WindowState.Normal;
        }
    }

Aufgerufen wird aus dem jeweiligen Window heraus die folgende Funktion:
MinimizeToTray.Enable(this);

11.07.2012 - 08:39 Uhr

Vielen Dank für die Antwort. Das war so ziemlich das, was ich gesucht habe 😃

10.07.2012 - 12:39 Uhr

Ich vermute mal, dass du so etwas suchst:
Create Custom Windows in WPF with Ease

09.07.2012 - 10:27 Uhr

Erster und letzter Push.

Ich hatte gesehen, dass BASS.NET die Möglichkeit bietet eine Art Shoutcast/Icecast/WMACast-Stream zu erstellen. Jedoch konnte ich auch hierzu nur unzureichende Informationen finden. Ich möchte keineswegs, dass irgendwelche Streams öffentlich zugänglich sind. Diese sollen nur im LAN abrufbar sein.

Hat hiermit evtl. jemand Erfahrungen gemacht?

04.07.2012 - 11:54 Uhr

Hallo zusammen!

Ich habe vor für mich privat eine Anwendung zu erstellen, die es mir ermöglicht die Musik die ich derzeit wiedergebe, auch über das Netzwerk verfügbar zu machen. Es gibt zwar schon das ein oder andere Programm, welches Audio Streaming über das Netzwerk bietet, jedoch sind mir diese zu umständlich oder bieten nicht genau den Funktionsumfang den ich mir wünschen würde.

An sich ist ja eine Audio Datei abspielen unter .NET keine große Sache. Komplizierter wird das Streamen der aktuellen Wiedergabe über das Netzwerk bzw. allgemein streamen von Audio. Hat da von euch bereits jemand Erfahrungen gemacht?

U.a. habe ich BASS.NET entdeckt. Generell soll es wohl damit möglich sein, über das Netzwerk zu streamen. Hier ist die Dokumentation zwar ganz gut gepflegt, doch es gibt zu wenige Tutorials o.ä., sodass ich bis heute nicht einmal einen Ansatzpunkt habe, wie ich damit Netzwerkstreaming realisieren könnte.

Kennt von euch jemand noch andere Komponenten oder weiß jemand wie man BASS.NET dafür verwenden könnte? Bei Google finde ich leider nicht viel, aber vielleicht sind es nur die falschen Suchbegriffe.

Vielen Dank schon mal für eure Hilfe!

EDIT: Danke, an den der den Thread in das richtige Forum verschoben und den Titel angepasst hat 😃 War mir nicht sicher ob der Thread im Audio oder Netzwerk Forum richtig aufgehoben war.

19.06.2012 - 08:38 Uhr

Danke dir für die Info! Das Programm ist recht "simpel" aufgebaut, daher hab ich die Funktion schnell gefunden. Außerdem liegt ja noch eine schöne Anleitung dabei 😃

Danke dir dennoch!

18.06.2012 - 11:19 Uhr

Wow, danke dir für die wahnsinnig schnelle Antwort! 😃 Es scheint genau das zu sein, was ich benötige!

Ich glaub ich sollte mich mal etwas mehr mit der Sysinternals-Suite beschäftigen! Die bietet ja ungeahnte Möglichkeiten! 😃

Danke dir nochmal.

18.06.2012 - 11:14 Uhr

Und das nächste Thema 😃

Ich würde gern den Traffic, der von einer Anwendung verursacht wird, auswerten lassen. Mit Traffic ist jetzt nicht bspw. der Paketinhalt gemeint, sondern lediglich die Menge an Daten die seit einem bestimmten Zeitpunkt hin und hergeschickt worden.

Ich würde also gerne sehen, dass Programm XY seit dem Start meiner Auswertung x-byte an Traffic verursacht hat. Eine Aufschlüsselung nach ein- & ausgehend ist nicht notwendig.

Am elegantesten wäre eine Lösung mit Windows 7 Boardmitteln. Sollte euch dazu nichts bekannt sein, gebe ich mich natürlich auch mit Programmen von Drittanbietern zufrieden 😃

Danke schon mal!

18.06.2012 - 11:09 Uhr

Hallo zusammen.

Gibt es ein Programm bzw. die Möglichkeit, Dateizugriffe eines Programms zu tracken? Bspw. möchte ich sehen, wann ein Programm auf bestimmte Dateien zugreift.

Umgebung ist Win7 64-bit.

Ist euch dazu etwas bekannt? Sollte es nichts fertiges geben, könnte man das irgendwie in C# umsetzen?

Danke schonmal 😃

18.04.2012 - 09:39 Uhr

Und noch ein Screenshot von den geöffneten Menüs. Ich habe hier die beiden Menüs zu einem Bild zusammengefasst. Es lässt sich nur ein Menü zeitgleich öffnen!

18.04.2012 - 09:38 Uhr

Hier ein Screenshot der Hauptanwendung

18.04.2012 - 09:18 Uhr

Hallo Community,

an dieser Stelle möchte ich euch mit meinem kleinen Privatprojekt bekannt machen.

Irgendwann platzte mein Startmenü aus allen nähten und unzählige Ordner wurden genutzt um weitere Verknüpfungen zur Verfügung zu stellen. Bspw. hatte ich einen Ordner Kunden, in dem Verknüpfungen zu den Entwicklungssystemen unserer Kunden enthalten waren. Gleiches gab es noch für Remotezugriffe, interne Verzeichnisse, etc. pp.

Ich dachte mir: "Das muss übersichtlicher und vor allem wesentlich schneller aufrufbar sein!"

Also entwarf ich meine kleine Anwendung. Es befindet sich noch in einer frühen Entwicklungsphase, weshalb ich bitten möchte, Fehler und evtl. fehlende Funktionen zu verzeihen 😉

Im Prinzip lassen sich nun Menüs definieren, die über einen Systemweiten Hotkey aufrufbar sind. An diese Menüs lassen sich diverse Aktionen hinzufügen. Dies betrifft bspw. das Starten einer Anwendung, Aufrufen von WebSites, öffnen von Dateien, etc. pp. Zur Steigerung der Übersichtlichkeit gibt es noch sog. Seperator. Wird nun dieser Hotkey aufgerufen, öffnet sich an der Position der Maus ein Menü. Der Hotkey muss festgehalten und mit der Maus die gewünschte Aktion gewählt werden.

Ein neues Menü lässt sich über Gruppe QuickMenüs --> "Neu" anlegen. Hier vergebt ihr eine Bezeichnung, sowie den Hotkey. Es funktionieren nur Texttasten, keine Funktionstasten wie F1, EINFG, POS1 o.ä. Das folgt noch.

Habt ihr ein Menü erstellt, markiert es und fügt über die Gruppe "Aktionen" --> Button "Neu" eine neue Aktion hinzu. Hier wählt Ihr eine Bezeichnung der Aktion (Text erscheint auf dem Button), eine Beschreibung (erscheint als ToolTip), eine Aktionsart und ggf. Prozess + Parameter. Die Aktionen könnt ihr über die Auf und Ab-Buttons auf der rechten Seite neu anordnen.

Folgende Aktionsarten stehen derzeit zur Verfügung:*StartProcess --> Startet die unter "Prozess" hinterlegte Anwendung und übergibt die in "Parameter" hinterlegten Parameter an diese. *SystemAction --> Derzeit ungenutzt. Soll später bspw. ermöglichen, Netzwerkverbindungen zu de-/aktivieren, VPNs aufzubauen und weiteres, was mir bis jetzt noch nicht eingefallen ist 😉 *ListDirectory --> Listet den Inhalt eines Verzeichnisses aus und stellt für jede/n Datei/Ordner einen Button zur Verfügung, welches die Datei/den Ordner aufrufbar macht *Seperator --> Stellt einen Begrenzer dar, um die Übersichtlichkeit zu steigern.

Bekannte Fehler (mir können auch noch ein paar Entfallen):*Beim Angeben eines Hotkeys, können noch Texte, nicht nur einzelne Tasten eingegeben werden. Es funktioniert derzeit nur mit Texttasten (keine Funktionstasten) *Bei einer zu großen Anzahl an Aktionen, werden Sie nicht mehr richtig dargestellt, da sie über den Bildschirm hinausragen *Beim Bearbeiten einer Aktion, wird das Aktionsmenü nicht korrekt aktualisiert *Die Aktionsliste ist noch recht unsauber, da hier die Aktionsarten noch vor der eigentlichen Bezeichnung stehen *Manche Icons werden nicht korrekt geladen, bzw. es fehlen vereinzelt Icons *Die Anwendung minimiert sich momentan immer in die Systray beim Klick auf das Schließen-"X". Die Anwendung kann dann nur über rechte Maustaste auf das Systray-Icon --> "Beenden" beendet werden. Hierfür folgt noch eine Einstellung *Prüfung auf korrekte Hotkey muss noch verbessert werden

Mittlerweile vermisse ich die Anwendung schon, wenn ich Sie mal nicht gestartet habe 😉 Wie bereits gesagt, es fehlen noch ein paar Funktionen, das Design ist auch nicht fertig und es kann noch zu Fehlern kommen. Dennoch würde ich mich über Feedback freuen, vllt. hilft euch die Anwendung ja auch ein winziges bissel, eure Produktivität zu steigern 😉

EDIT:
Getestet habe ich die Anwendung bisher nur unter Windows 7. Benötigt wird das Framework in der Version 4

EDIT2:
Neue Version angefügt:*Fehler beim Registrieren von HotKeys behoben. *Einstellungsdialog für Grundfunktionen hinzugefügt (erreichbar unten rechts über die Zahnräder)

25.08.2011 - 09:10 Uhr

Also ich persönlich habe für Mort gestimmt. Allerdings nur als zweite Wahl. Erste Wahl war bei mir Elvis. Ich interessiere mich stets für neue Technologien, eigene Weiterentwicklung, Schulungen und achte darauf stets optimierten und sauberen Quelltext zu liefern.

Jedoch stelle ich aufgrund dessen auch Anforderungen an den Arbeitgeber, wie bspw. pünktliche Bezahlung, Anspruch auf meinen vertraglich geregelten Urlaub, etc. pp. Daher ist es meines Erachtens auch in Ordnung ein wenig Mort zu stimmen 😉

Als Einstein sehe ich mich definitiv nicht. Es gibt noch zuviel was ich lernen kann. Daher bleib ich da eher "bescheiden" 😉 Allerdings können meiner Meinung nach Einsteins auch ziemlich störend im Betrieb sein, zumindest wenn man an die falschen Einsteins gerät. Wir hatten einen, der bestehende Entwicklungen von Grund auf neu aufbereiten wollte. Das obwohl wir im Zeitdruck vom Kunden waren. Es wurden nur wenige Anforderungen für diese Projekte an ihn gestellt, er konnte sich jedoch mit dem Code nicht anfreunden und wollte es eben neu machen. Wir haben ihm oft gesagt, dass wir das später definitiv machen können, aber nicht jetzt wo wir eine kleine Änderung unter Zeitdruck für den Kunden vornehmen müssen. Jedoch kamen hier noch ellenlange Diskussionen und die Entwicklungen wurden teils doch von anderen Mitarbeitern vorgenommen.

18.07.2011 - 10:25 Uhr

Hallo Tobias,

an sich eine sicherlich sehr brauchbare Sache. Ich habe es mir eigentlich nur heruntergeladen um zu prüfen, ob auch wöchentliche Berichte möglich sind. Scheint auf jeden Fall ganz so 😃

Was mir negativ aufgefallen ist:*Starten als Administrator (wie vagtler bereits angemerkt hat). Wenn es um das Autoupdate geht, dann sollte die Anwendung beim Updaten die Administratorrechte einfordern, aber nicht dauerhaft. *Speichern als PDF: Ich habe beim Start einen Ordner gewählt und die Anwendung hat mich auch gefragt ob der Ordner, da nicht vorhanden, angelegt werden soll. Scheinbar wird er allerdings nicht angelegt und ich werde erneut nach einem Pfad zum Speichern gefragt. Außerdem hat der "Speichern unter"-Dialog noch Rechtschreibfehler 😉 "Der Ordner für die PDFs konnte nicht gefunden werden, wähle bitte einen gültigen Ordner!" *Breche ich den Speichern-Vorgang bzw. "Speichern unter" ab, erscheint eine Exception:> Fehlermeldung:

System.IO.DirectoryNotFoundException: Ein Teil des Pfades "D:\Eigene Dateien\Eigene Dokumente\Ausbildungsberichte\Ausbildungsbericht für Woche 0.pdf" konnte nicht gefunden werden.

  • Die Schriftgröße vom Ausbildungsjahr im PDF scheint kleiner zu sein, als die der restlichen Texte. *Wenn die Ausbildung am 01.07.2011 anfängt und ich erstelle hierfür einen Wochenbericht, wird Ausbildungswoche 0 angegeben, obwohl es ja die Ausbildungswoche 1 ist. Auch wenn die Woche aus lediglich einem bzw. zwei Tagen besteht
  • Eventuell wäre es gut, wenn es eine Art Vorlage für Dateinamen geben würde, sodass man bspw. nicht nur Woche 0 / Woche 1 im Dateinamen hat, sondern auch noch ein Datum automatisch einfügen lassen kann o.ä. *Das TabControl flackert unschön, wenn Text eingetragen wird *Ich bin nicht sicher wie ich es geschafft habe, aber nach dem Speichern des Berichtes hat die Anwendung die Zeilenumbrüche aus den Textboxen entfernt. Beim Export nach PDF sind die Umbrüche allerdings noch vorhanden?!

Das war es erstmal von meiner Seite. Ansonsten eine schöne Sache 😃

EDIT: Zwei neue Punkte in die Liste aufgenommen

27.05.2011 - 09:57 Uhr

Hallo Community,

ich habe einen Report, der etliche Spalten beinhaltet. Um den Platz möglichst den die Spalten beanspruchen möglichst gering zu halten (da sie teils über eine Seite hinaus ragen), hatte ich als mir als Lösungsweg gedacht, dass man einfach die Spaltenbreiten dynamisch einstellt. Somit sollte sich die Breite der Spalte einfach an den Inhalt anpassen.

Jetzt hab ich festgestellt, dass es nicht so einfach wie bspw. bei WPF ist, also man nicht einfach in die Breite ein AUTO oder * einträgt.

Kennt ihr eine Möglichkeit die Spaltenbreiten dynamisch an den Inhalt anpassbar zu machen?

EDIT
Hmmmm, irgendwie hab ich nicht richtig aufgepasst 😉 Die Spaltenbreite passt sich bereits automatisch an, wenn ich die Spalten im Designer ganz klein schiebe. Allerdings gibt es automatisch einen Zeilenumbruch bei Leerzeichen den ich nicht verhindern kann. Gibt es eine Möglichkeit, den Zeilumbruch bei Leerzeichen verhindern zu lassen?

Die CanGrow-Eigenschaft hilft da nicht wirklich weiter. Zwar wird durch CanGrow = False kein sichtbarer Zeilenumbruch erzeugt, dennoch fehlt das Währungssymbol. Das Währungssymbol füge ich im Feldausdruck hinzu.

Vielen Dank schonmal,
der raktenhund

07.04.2011 - 17:53 Uhr

Hallo an alle 😃

Ich habe da eine kleine Frage. Ist es eigtl. möglich mithilfe von C# ein Control einer anderen Anwendung sozusagen zu ersetzen oder zu überzeichnen? Wenn ich das Control Handle hätte, wie oder wo müsste ich dann ansetzen?

Thematik ist folgende:
Ich habe ein Anwendung in der ich wie bspw. in Access Formulare erzeugen kann. Zudem kann ich in den Forms COM DLLs laden und die Funktionen ausführen. Das Laden der DLLs wäre kein Problem. Ich würde also eine solche Form erzeugen, meiner DLL die entsprechenden Control Handles übermitteln und meine Funktion muss dann ein Platzhalter Control mit einer Textbox ersetzen.

Daher benötige ich ein paar Denkanstöße, wie ich vorgehen kann. Ich brauche nicht unbedingt Snippets, nur Richtung weisen würde ausreichen 😃

Vielen Dank schonmal für die Antworten 😃

31.03.2011 - 15:28 Uhr

Jetzt habe ich das Problem gelöst. Ich habe einfach eine View an meiner Datenbank erzeugt, die mir die entsprechenden Daten darstellt. Aus dieser View habe ich ein Entity erzeugt, auf welchem ich nun einfach das Select ausführe.

public partial class xyzMgmtDomainService
    {
        [RequiresRole("RatedA")]
        public IQueryable<vw_aspnet_AssignedRoles> GetAspnet_AssignedRoles(Guid CurrentUserID)
        {
            return this.ObjectContext.view_aspnet_AssignedRoles.Where(e => e.UserId == CurrentUserID);
        }
    }

Thema kann also geschlossen werden 😃

Danke!

31.03.2011 - 12:33 Uhr

Hallo zusammen,

um gleich zum Thema zu kommen:

Ich bin recht neu im Thema EntityFramework, etc. und habe hier nun ein Silverlight RIA Projekt mit aut. generierter Benutzersteuerung, etc. Nun möchte ich in einem DataGrid sämtliche Rollen die einem Benutzer zugewiesen worden sind, mit Rollenbeschreibung darstellen lassen. Dafür habe ich eine Queryfunktion angelegt die per Join-Anweisung noch die Rollenbeschreibungen ausliest.


    public class aspnet_AssignedRoles
    {                
        public string Description;

        [Key]
        public Guid RoleID { get; set; }

        [Key]
        public Guid UserID { get; set; }
    }

    
    public partial class xyzMgmtDomainService
    {
        [RequiresRole("RatedA")]
        public IQueryable<aspnet_AssignedRoles> GetAspnet_AssignedRoles(Guid CurrentUserID)
        {
            IQueryable <aspnet_AssignedRoles> test =    
                this.ObjectContext.vw_aspnet_UsersInRoles
                        .Join(this.ObjectContext.vw_aspnet_Roles,
                            role => role.RoleId,
                            assigned => assigned.RoleId,
                                (assigned, role) => new aspnet_AssignedRoles { Description = role.Description, RoleID = role.RoleId, UserID = assigned.UserId })
                                    .Where(e => e.UserID == CurrentUserID).OfType<aspnet_AssignedRoles>();
            return test;
        }
    }

Die DomainDataSource will die Daten scheinbar auch laden, jedoch kommt es zu folgender Fehlermeldung:

Fehlermeldung:
System.ServiceModel.DomainServices.Client.DomainOperationException: Load operation failed for query 'GetAspnet_AssignedRoles'. xyz.Web.Services.aspnet_AssignedRoles' ist kein gültiger Metadatentyp für Typfiltervorgänge. Typfilterung ist nur für Entitätstypen und komplexe Typen zulässig.

Leider sagt mir die Fehlermeldung rein garnichts, habe Google mit verschiedensten Begriffen der Meldung befragt, kann da aber nichts brauchbares finden. Vielleicht suche ich auch einfach nur nach den Falschen Begriffen.

Die Ergebnisansicht der Variable "test" enthält soweit die korrekten Werte, allerdings werden die Daten nicht an das Grid gemappt. Ändere ich die Funktion testshalber so ab, dass sie mir eine List<aspnet_AssignedRoles> zurückgeben soll, crasht es schon bei der ToList()-Funktion der test-Variable:

    public partial class xyzMgmtDomainService
    {
        [RequiresRole("RatedA")]
        public List<aspnet_AssignedRoles> GetAspnet_AssignedRoles(Guid CurrentUserID)
        {
            IQueryable <aspnet_AssignedRoles> test =    
                this.ObjectContext.vw_aspnet_UsersInRoles
                        .Join(this.ObjectContext.vw_aspnet_Roles,
                            role => role.RoleId,
                            assigned => assigned.RoleId,
                                (assigned, role) => new aspnet_AssignedRoles { Description = role.Description, RoleID = role.RoleId, UserID = assigned.UserId })
                                    .Where(e => e.UserID == CurrentUserID).OfType<aspnet_AssignedRoles>();
            return test.ToList();
        }
    }

Das einzige was ich rauslesen kann ist, dass etwas an der "aspnet_AssignedRoles"-Klasse fehlt. Nur finde ich einfach nicht heraus, was genau verlangt wird. Könnt ihr mir weiterhelfen bzw. einen schubser in die richtige Richtung geben? 😉

Vielen Dank schonmal im voraus 😃

Grüße vom raketenhund!