Laden...
Avatar #avatar-3231.jpg
Shion myCSharp.de - Member
Applikationsentwickler Schweiz Dabei seit 20.05.2010 24 Beiträge
Benutzerbeschreibung

Forenbeiträge von Shion Ingesamt 24 Beiträge

30.05.2011 - 14:49 Uhr

Sowas gibt's ja öfters, wie mir scheint.
Jedoch war ich trotzdem fast am verzweifeln als ich vorhin folgendes gefunden habe:

        private bool IsNull(int? i)
        {
            return i == null ? true : false;
        }

        private bool IsNull(decimal? d)
        {
            return d == null ? true : false;
        }

@Zu den Hinweisen unten:

Genau, ich würde das mit HasValue oder direkt mit == null verwenden. Auch wenn der Aufruf mit int machbar wäre, bringt dies ja nichts. int kann im Gegensatz zu int? sowieso nicht null sein. 😉

03.05.2011 - 11:06 Uhr

Doch, eigentlich schon.

Jetzt hab ichs auch gesehen dass die sogar nen Shop habe bei Qube Solutions welcher Fertig-Lösungen anbietet. Ich kuck da mal nach.

Und nein, mithilfe von Google und "LED-Cube C#" oder ähnlichem fand sich tatsächlich nichts.

Danke dir.

03.05.2011 - 11:01 Uhr

Danke für den Tipp.

Unter LED Cube habe ich aber nur einen Thread der mir gar nicht half, gefunden.
Unter LED habe ich dann doch mehr gefunden, aber zum Beispiel schlussendlich nur Etwas auf CodeProject welches mit irgendeiner fertig Platine mit 8 LEDs arbeitet.

Kannst du mir nochmals auf die Sprünge helfen?

Danke.

03.05.2011 - 09:59 Uhr

Hallo zusammen,

Ich habe vor ein paar Tagen gesehen zu einem 5x5x5 LED Würfel der Animationen abspielen kann.
Etwa sowas hier: Youtube-Video

Jetzt ist eigentlich meine Frage:

Was braucht man alles um so Etwas zu erstellen?

Also konkret:*Ist es mit C# möglich? *Was für ein Framework oder sonstige Zusatzsoftware braucht man? *Was für Hardware müsste man kaufen, oder gibt es sogar irgendwelche billigen "Toolkits"?

Vielen Dank für die Hilfe, habe dazu nämlich nicht gross was gefunden was mir wirklich weiterhelfen könnte.

Gruss,
Shion

28.03.2011 - 14:15 Uhr

Hallo MarsStein,

Ich habe jetzt wie von dir vorgeschlagen den Code so angepasst dass mit den setTimeout's gearbeitet wird. Jedoch bringt dies im Internet Explorer 7 nicht den gewünschten Effekt (andere IE-Versionen nicht überprüft da es im 7ner gehen sollte).
Im Firefox 4.0 funktioniert es jedoch prächtig. (Mal abgesehen davon dass dort wie auch im Chrome die Validierung nur 100ms dauert und nicht wie im IE 4-5 Sekunden oder gar noch länger.)

Danke vorläufig mal für deine Hilfe und dein Beispiel.

Und hallo ingemar,

Hier ist der Code zwischen den Statusänderungen (IDs und so sind angepasst 😉):

            $('.dropdown1').each(function (index)
            {
                if (!Check(this, index, '.hiddenfield1'))
                {
                    if ($($('.textbox1')[index]).val() == '')
                    {
                        $('.textbox1')[index].focus();
                        isValid = false;
                        return false;
                    }
                }

            });

            if (isValid)
                $('.dropdown2').each(function (index)
                {
                    if (!Check(this, index, '.hiddenfield2'))
                    {
                        if ($($('.textbox2')[index]).val() == '')
                        {
                            $('.textbox2')[index].focus();
                            isValid = false;
                            return false;
                        }
                    }

                });

wobei die Funktion Check so aussieht:

function Check(t, index, hfClass)
        {
            var isValid = true;
            if (!t.disabled)
            {
                if ($('#' + t.id + ' option:selected').text() != $(hfClass)[index].innerHTML)
                {
                    isValid = false;
                    return false;
                }
            }
            return isValid;
        }

Wie bereits erwähnt geht jede .each()-Funktion durch ca. 100 Dropdowns und HiddenFields. Je nachdem weniger oder mehr, aber 100 ist ein guter Schnitt.

Gruss,
Shion

25.03.2011 - 15:35 Uhr

Ja, die geht leider tatsächlich so lange.
Habe das mal debuggt.

Was ich grundsätzlich mache ist Einträge in einem riesigen Gridview zu überprüfen (Das sind im Durschnitt das Holen von etwa 200-300 Controls) und darauf eigentlich einfache String-Operationen (wie ein Trim() oder ein Vergleich von zwei Strings) anzuwenden.

Gibt es sonst ein Möglichkeit mit Javascript eine Art Thread.Sleep einzubauen nur um mal zu schauen ob der Text immerhin so geändert wird?

Mich beschleicht jetzt das Gefühl dass es nicht aktualisiert weil zwei aufeinanderfolgende Jquery-Each Funktionen ($('.meineKlasse').each(function(index){...});) aufgerufen werden.
Könnte das ein mögliches Problem sein?

Danke für die Hilfe. 😃

EDIT
Die Each-Funktionen scheinen tatsächlich das Problem gewesen zu sein!

Habe das überpüft in dem ich jeweils nach dem setzen des Texts ein alert ausgegeben habe. Und siehe da, der Text wurde aktualisiert.

Jetzt heisst es also irgendwie einen Work-around dafür zu finden. Mit setTimeouts und mehreren Funktionen komme ich nicht ans Ziel. Gibt es also vielleicht irgendwas, welches wie das alert(), ein Neu-Zeichnen der Seite erzwingt?
(Wenns dann wirklich das ist, kann das jemand bestätigen?)

25.03.2011 - 15:26 Uhr

Danke nochmals für die Antwort.

Aber das ist nicht das was ich versuche zu beheben.

Ich habe eigentlich einen LinkButton welcher meine Javascript-Methode ausführen soll um Clientseitiges Validieren (welches zu keinem anderen Zeitpunkt gemacht werden kann) zu ermöglichen.

Ich drücke also auf den Button und meine Validate()-Funktion wird ausgeführt. Jetzt will ich anhand des Ergebnises dieser Funktion entweder kein Postback machen so dass der User seine Fehler korrigieren kann, oder ich will ein Postback machen und Serverseitig meinen Rest erledigen.

Das Problem ist jetzt eigentlich folgendes:
Egal wie oft ich in meiner Validate()-Funktion den Text oder sonstigen Inhalt eines DIVs oder eines anderen Elements ändere, wird immer nur die letzte Änderung wahrgenommen nachdem der Funktionsaufruf zu Ende ist.
Ich hätte halt gerne gehabt dass man wie eine Art Fortschritt (einfach nur mit 2 Stati, fertig und nicht fertig in diesem Fall) sieht.
Also: Funktionsaufruf => Setzen: Nicht fertig als Text im DIV => Rest der Funktion => Setzen: Fertig als Text im DIV.

Konnte ich das Problem so ein bisschen besser beschreiben?

Gruss,
Shion

25.03.2011 - 15:17 Uhr

Danke für die Antwort.

Dummerweise war jetzt genau das ein Copy & Paste Fehler.
Ich habe in meiner Methode am Schluss ein return isValid; eigentlich.

Werde das gleich nachführen und ergänzen.

EDIT
Habe das jetzt im ersten Posting ergänzt.

Ausserdem habe ich, wie von dir vorgeschlagen, auch schon den Umweg über SetTimeout zwischenzeitlich versucht. Jedoch auch ohne Erfolg.

Gruss,
Shion

25.03.2011 - 13:45 Uhr

Hallo zusammen,

Ich stehe momentan vor einem ziemlich schwierigem Problem für das es jedoch sicher eine einfache Lösung gibt.

Folgendes Szenario:

<asp:LinkButton ID="btnSave" OnClientClick="return Validate();" runat="server" CssClass="arrow_right" meta:resourcekey="btnSave"></asp:LinkButton>
function Validate()
        {
            var isValid = true;
            $('#status').text('Seite wird auf Fehler überprüft.');

            //Viele Abfragen und Überprüfungen welche bis 10 Sekunden dauern können
            //Ausserdem setzen von isValid und Markierungen im GUI mit .css(...) von Jquery

            if (isValid)
                $('#status').text('Änderungen werden jetzt gespeichert.');
            else
                $('#status').text('Es sind Validationsfehler aufgetreten.');

            return isValid;
         }

(return isValid ist dafür da um bei Fehlern das Postback des Buttons nicht auszuführen. So oder so (true oder false), der Text des Divs wird nicht aktualisiert)

Mein Problem ist jetzt folgendes:
Ich sehe die erste Änderung vom Div (#Status) nicht sondern erst eine der beiden Änderungen nach ausführen der Methode.
Wie kann ich das also so ändern dass dieser Text dargestellt wird (und zwar nur dieser, die anderen erwähnten GUI-Updates sind völlig egal) und dann die Methode ihren Job macht und dann der Status noch durch den zweiten Status dargestellt wird?

Habe es auch schon so versucht, dass ich anstatt eine Methode 2 oder 3 Methoden habe, also etwa so (Die Funktionen setzen jeweils nur den Text):

<asp:LinkButton ID="btnSave" OnClientClick="SetInProgress;return Validate();SetFinished();" runat="server" CssClass="arrow_right" meta:resourcekey="btnSave"></asp:LinkButton>

Was kann ich tun?

Vielen Dank schonmal für die Hilfe.

Gruss,
Shion

04.03.2011 - 10:33 Uhr

Hallo nochmals,

Genau so habe ich das jetzt auch umgesetzt gehabt 😃

Gruss,

Shion

03.03.2011 - 22:16 Uhr

Hallo MarsStein,

Das ist doch mal eine schöne Lösung. So muss ich jeweils nur mein Web.config nicht mit-publishen (falls es keine Änderungen hat) und mich um nichts mehr kümmern.

Danke für den Ansatz!

Gruss,
Shion

03.03.2011 - 15:10 Uhr

Hallo zusammen.

Ich stehe vor einem kleinen Problem welches ich nicht geschafft habe zu lösen.

Gibt es eine Möglichkeit sowohl CSS- als auch Javascript-Dateien je nach Konfigurationsmodus zu laden?

Ich habe zum Beispiel folgende Deklaration im ASPX-Code:

<script src="Javascript/jquery.tableFixer.js" type="text/javascript"></script>

Ich möchte gerne dass ich diese Version im Debug-Modus lade.

Jedoch hätte ich gerne das im Release-Modus folgendes geladen wird:

<script src="Javascript/[COLOR]min/[/COLOR]tableFixer.js" type="text/javascript"></script>

Kann man da irgendetwas machen, von mir aus auch im Code-Behind?
Ich hätte da an folgendes Konstrukt gedacht:

        protected void Page_Init(object sender, EventArgs e)
        {
#if DEBUG

#else

#endif
        }

Grund für diese Anforderung ist eigentlich der, dass ich 2 CSS-Files und 4 Javascript-Files habe, die jeweils noch in komprimiertes Form vorliegen. Beim entwickeln möchte ich gerne die normalen Files haben, wegen Leserlichkeit und natürlich zum debuggen.
Wenn ich jedoch die Website publishe im Release-Modus möchte ich dies natürlich nicht da diese Files zusammen unkomprimiert ca. 200 Kilobyte grösser sind als wenn sie komprimiert wären.
Und da ich faul bin, würde ich das hald gerne automatisiert haben, und nicht jedes Mal diese Pfade anpassen müssen.

Vielen Dank für Anregungen oder Lösungsvorschläge,

Shion

16.12.2010 - 13:00 Uhr

Ich kann mich meinem Vorposter nur anschliessen.

Trotzdem möchte ich noch hinzufügen, wenn auch leider wieder nicht gratis, dass es Unity3D gibt.
Habe damit auch schon was gemacht und bin momentan an nem kleinen Projekt zum austesten dran und es ist relativ simpel.
Falls du es dir mal anschauen möchtest, hier der link: http://unity3d.com/

Mit der Gratisversion kann man immerhin für PC und MAC publishen.
Code-mässig ist es eine Javascript-Variation aber man kann auch mit C# arbeiten!

Shion

23.11.2010 - 21:00 Uhr

N'abend.

Hoffe dieser Link hilft dir weiter: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.causesvalidation.aspx
Ist im Grunde ganz einfach, Property setzen und fertig 😃

Falls weitere Fragen entstehen einfach wieder posten.

17.11.2010 - 16:28 Uhr

Hallo,

Ich habe jetzt meine Textbox direkt im HTML-Markup auf Visible="true" gesetzt (bzw. Visible="false") gelöscht.
Habe dann initial die Rows mit string.Empty initliasiert so dass am Anfang leere Textboxen vorhanden sind.
In diese Text geschrieben und auf den Button geklickt und mal geschaut ob die Werte vorhanden sind. Bei meinem Beispiel funktioniert das wunderbar, es ist immer (nach mehreren Tests mit verschiedenen Startwerten und Eingaben) der neue Text drin.

Irgendwas passiert bei dir noch zwischendrin.

Ich nehme an du hast überprüft das FindControl wirklich auf das richtige Control geht und auch nicht null zurückliefert?

Hast du schon probiert ein neues Projekt, so wie ich, zu erstellen und das nochmals nachzubilden? (Kannst dazu sonst auch einfach meinen Code kopieren)
Geht es dann?

Ansonsten wüsste ich da auch gerade nicht weiter.

Shion

16.11.2010 - 19:23 Uhr

Guten Abend,

Wie machst du denn genau das DataBinding?
Habe das Szenario kurz nachgestellt und bin auf keine Probleme gestossen.

ASPX:

        <asp:Repeater ID="Repeater1" runat="server">
            <ItemTemplate>
                <asp:TextBox ID="Textbox1" Text='<%# Bind("MeinBinding") %>' runat="server"
                    Visible="false" Columns="65" Rows="5" TextMode="MultiLine" />
            </ItemTemplate>
        </asp:Repeater>
        <asp:Button ID="Button1" runat="server" Text="Button" />

USINGS:

using System;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;

C-Sharp:

protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("MeinBinding");
                for (int i = 0; i < 10; i++)
                {
                    DataRow row = dt.NewRow();
                    row[0] = string.Format("Dies ist Textbox #{0}!", i + 1);
                    dt.Rows.Add(row);
                }
                Repeater1.DataSource = dt;
                Repeater1.DataBind();
            }
            Button1.Click += new EventHandler(Button1_Click);
        }

        void Button1_Click(object sender, EventArgs e)
        {
            foreach (RepeaterItem itemRep in Repeater1.Items)
            {
                TextBox textBox1 = (TextBox)itemRep.FindControl("Textbox1");
            }
        }

Was ich sonst noch aus deinem Post sehe:

In deiner FindControl verwendest du einen anderen Namen als du im Snippet in der Textbox definiert hast. Vlt. auch darauf zurückzuführen dass du den Code anders kopiert hast als er wirklich ist 😃.

Diene foreach-Schleife wird ja nach dem DataBind-Aufruf deines Repeaters ausgeführt nehme ich an? Oder machst du die in deine definierten onitemdatabound "repFragebogen_ItemDataBound" Methode? Falls es in der onItemDataBound-Methode passiert wäre dort das Problem dass die Textboxen und Items noch nicht existieren bzw. noch nicht abgefült werden.

Shion

16.11.2010 - 19:02 Uhr

Guten Abend,

Wenn ich mich richtig erinnere braucht der PopupExtender ein Panel als PopupID.
Warum hast du den Extender und den Button nicht im ASCX-Control?

Wenn nicht, kannst du mal den Code posten von deinem PopupExtender?

Hoffe konnte soweit mal helfen,

EDIT:
Mir ist noch was eingefallen.
Funktioniert denn der Schliessen-Button und das Control geht zu? Also ist das wirkliche Problem nur das beim Starten das Control schon angezeigt wird?

Shion

15.10.2010 - 12:54 Uhr

Wie gesagt, dieser Code entstand in weniger als 3 Minuten.
Nen Timer oder Backgroundworker wäre da eine viel schönere Lösung.

Aber sollte ja nur zum Denkanstoss beitragen.

14.10.2010 - 19:50 Uhr

Hallo,

Willst du das wie bei MSN die in der Taskleiste das Programm blinkt oder bei einem Menustrip das Menu blinkt?

Für Ersteres kannst du mal das probieren:

http://stackoverflow.com/questions/73162/how-to-make-the-taskbar-blink-my-application-like-messenger-does-when-a-new-messa

hWnd kriegst du mit: this.Handle bzw. MeineForm.Handle.

Hoffe du bist Englisch ein bisschen mächtig, ansonsten einfach mal Copy & Paste und ausprobieren.

Für das blinken eines Menustrips müsste ich mal ausprobieren.
Entweder antwortet noch wer oder ich editier das hier rein.

mfg, Shion

EDIT:
Für das Menuitem ist mir auf die Schnelle nichts kluges eingefallen. Aber ich denke mit folgendem Snippet hast du auch ne Idee dafür:

Blink(menuStrip1.Items[0], 10, 200);

        private void Blink(ToolStripItem item, int blinks, int interval)
        {
            Color orig = item.BackColor;
            new Thread(new ThreadStart(delegate()
            {
                for (int i = 0; i < blinks; i++)
                {
                    item.BackColor = Color.Orange;
                    Thread.Sleep(interval);
                    item.BackColor = orig;
                    Thread.Sleep(interval);
                }
            })).Start();
        }
20.05.2010 - 13:42 Uhr

Was versuchst du den zu machen?

Wenn du nur die Maus ausgeben willst kannst du z.B. im Konstruktor deines Games IsMouseVisible auf true setzen.

Oder versuchst du einen eigenen Mauszeiger anzuzeigen?
Wenn ja, poste mal den Code wie du den Vector2 (nehme ich an) deines Mauszeigers updatest.

Gruss,

Shion

20.05.2010 - 12:55 Uhr

das hier ist ein perfektes beispiel für die TPL. ein parallel.for über den gesamten addressraum und den ping darin verpacken und du bekommst das gesammte drum herum geschenkt.

in .net 4 ist das bereits integriert, für .net 3 musst du dir die lib downloaden und einbinden.

Danke für die Idee. Das tönt sehr interessant.

Dummerweise kann ich noch nichts mit dem FW 4.0 anfangen (nicht installiert auf Zielmaschine[n]). Aber ne Library dafür downloaden muss ich mir noch überlegen.

Vorallem das hier: http://www.devx.com/dotnet/Article/39204/1763/page/2 sieht sehr interessant aus.

Ma schauen ob es mir schlussendlich überhaupt was bringt. 😃

20.05.2010 - 12:31 Uhr

Ich werde mir den SmartThreadPool von CodeProject mal anschauen, Danke 😃

Mit dem SendAsync sollte eigentlich schon richtig gewesen sein, habe da von MSDN abgeschaut. Daran sollte es also nicht gelegen haben.

Wenns nichts wird mit dem SmartThreadPool meld ich mich wieder.

20.05.2010 - 11:14 Uhr

Danke für die Antwort.

Das Ganze läuft sowieso schon in einem seperaten Thread so dass mein GUI nicht einfriert.

Das Timeout ist auf 10Millisekunden eingestellt.
Dies sollte bei uns locker reichen, da ein normaler Ping auf einen dieser Hosts (sind Drucker[server]) maximal 2ms braucht (ist getestet.)
Klar kann es sein dass einer mal länger braucht, aber dann hat er Pech gehabt.

Ich hatte das ganze mal probiert mit SendAsync, jedoch war das kein bisschen schneller.
Auch habe ich probiert es in 30 seperate Thread's zu verteilen, jedoch auch dies ohne Performanceverbesserung.

Habe mich noch ein bisschen erkundigt, und allem Anschein nach ist das, was die Performanceeinbussungen verursacht das Werfen einer Exception.
Ich verwende keine, da ich die Fehlermeldung nicht brauche, jedoch wird irgendwie doch der ganze Stacktrace, etc. in eine Exception gefüllt. Und diese Reflection-Zeug braucht so lange.

Hast du, oder irgendjemand anders, noch eine weitere Idee?

Vielen Dank,

mfg,

Shion

20.05.2010 - 10:48 Uhr

Guten Tag miteinander,

Bei mir hat sich ein Problem mit der System.Net.NetworkInformation.Ping Klasse aufgetan welches ich auch nicht mit Sockets oder ähnlichem lösen kann.

Folgender Code funktioniert bei 100 Pings auf 100 versch. Hostnamen noch einigermassen schnell wenn ca. jeder 10te-15te Hostname gar nicht existiert:

System.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping();
try
{
     PingReply pingReply = ping.Send(hostname, 10, new byte[] { 0, 1, 2, 3});
     //DO STUFF
}
catch
{
     //DO OTHER STUFF
}

Das Problem mit diesem Ansatz ist, dass ich ca. 2500 Pings machen muss, und wenn jeder 10te-15te eine Exception wirft wegen nichtvorhandenseins des Hostnamens, braucht das Ganze extrem lange.

Ich suche also nach einer Möglichkeit ohne einen Try-Catch-Block ODER eine Möglichkeit um zu überprüfen ob ein Hostname auch wirklich existiert.
Gibt es da eine vernünftige Lösung, oder ist dies tatsächlich die schnellste Variante?

Vielen Dank für die Antworten,

Shion