Laden...

Forenbeiträge von sheitman Ingesamt 1.047 Beiträge

29.03.2007 - 17:11 Uhr

muß der author entscheiden^^
ebeneso ob er die ganze naktione nauch durchführen möchte wenn sich nichts ändern würde, sprich dsa this.ad==ad wäre, denn dann würde man sich ein paar if statements sparen^^

letzlich liegts nun an ihm =)

29.03.2007 - 16:24 Uhr

glaub gurke hat das beste nun gefunden^^

alle eventualitäten abgedeckt... bei mir fehlte auch noch der check ob null übergeben wurde, weil da knallts dann ja auch^^

hier mal lösung bissl hübscher gestaltet und immer auf das attribut bezogen gearbeitet

if (this.ad != ad) { //wenn neuer wert ungleich dem alten
    if (this.ad != null) { //wenn alter wert nicht null
        //eventhandler entfernen
        this.ad.messageHandler -= new MessageDelegate(ad_messageHandler);
    }
    this.ad=ad; //neuen wert zuweisen
    if (this.ad != null) { //wenn neuer wert ungleich null
        //eventhandler anhängen
        this.ad.messageHandler += new MessageDelegate(ad_messageHandler);
    }
}
29.03.2007 - 13:40 Uhr

wie gesagt, von hause aus ist das nicht so ohne weiteres machen, es ist halt etwas umständlicher, darum -> suche: eval, scripting in c# etc.^^

du kansnt dir natürlich auc hnen eignen parser für deinne string basteln, wenn du weißt wie er aufgebaut ist und das gewissen regeln unterliegt hindert sich ja nix daran^^

dann solltest du dir stringfunktionen anschauen wie IndexOf, Substring oder vielelicht auch regex...

29.03.2007 - 13:36 Uhr

@sheitman
zu deinem nachtrag: es wäre nicht sinnvoll den delegate zu entfernen da this.ad = ad in jedem fall gesetzt wird.

diese aussage bezieht sich ja nun nur auf deinen neuen code, aber bei mir war das ja nicht der fall g

bei mir war das ja so, das es entfernt wird wenn es aktuell nicht null ist

denn wenn man es nicht entfernt, wird ein herumschwirrendes altes ad ja immernoch den event feuern können...

29.03.2007 - 12:23 Uhr

reicht nicht das hier?

public void SetAd(Ad ad)
{
      if (this.ad == null || this.ad != ad)
      {
                    this.ad = ad;
                    this.ad.messageHandler += new MessageDelegate(ad_messageHandler);
      }
}

nachtrag:
hm, wäre es nicht sinnvoll das MessageDelegate wieder zu entfernen falls this.ad!=ad ist?

dann müßte das ganze aber doch wieder etwas umständlicher gebaut werden

public void SetAd(Ad ad) {
    if (this.ad == null || this.ad != ad) {
        if(this.ad!=null) {
            this.ad.messageHandler -= new MessageDelegate(ad_messageHandler);
      }
      this.ad = ad;
      this.ad.messageHandler += new MessageDelegate(ad_messageHandler);
    }
}

oder

public void SetAd(Ad ad) {
    if (this.ad != null && this.ad != ad) {
        this.ad.messageHandler -= new MessageDelegate(ad_messageHandler);
        this.ad = null;
    }
    if(this.ad == null) {
      this.ad = ad;
      this.ad.messageHandler += new MessageDelegate(ad_messageHandler);
    }
}
29.03.2007 - 11:57 Uhr

aso... hihi... naj adurch die obrige antwort kam ic hauf den weg das du ne nweg suchst nen eintrag aus deinen daten auszulesen... aber das war ja garnet das problem.. sry 😁

zum rest kann ihc grad nichhts sagen... manchmal verwirrt code einfach nur 😉

*nochmal in ruhe anschau*

nachtrag:
einrückungen wärn schick ^^

29.03.2007 - 11:14 Uhr

schaudir mal das hier an, das dürfte ja sein wonach du suchts, oder?
http://support.microsoft.com/kb/307643/de

29.03.2007 - 10:46 Uhr

und was machst du dann damit? willst du ihn direkt auswerten oder vorher speichern?

29.03.2007 - 10:24 Uhr

wie verwaltest du die daten denn? über ein dataset zufällig?
weil da kannnt du auch sql befehle drauf los lassen^^

ansonsten wenn du direkt mit der xml datei arbeitest bietet sich sicherlich xpath an

29.03.2007 - 10:18 Uhr

wenn ich dich richtig verstanden hab möchtest du den inhalt des strings ausführen, richtig?
dann such mal nach scripting... vielleicht ist das ja was für dich

28.03.2007 - 16:43 Uhr

naja bezüglich der shif+7 taste sollte das ja kein problem sein, KeyEventArgs hat ja ne menge properties^^

vielleicht wäre es auch bessre nicht den keycod zu behandeln sondern dsa zeichen was zurck gegeben wird, weil die amis haben / woanders liegen...

28.03.2007 - 16:03 Uhr

nice =)

worauf du noch achten mußt ist auf die rückstaste... das kann zu tollen ergebnissen führen wenn ich bei nem ergebnis wie z.b. 2,3E-04 die letzen stellen weg nehme... 😉

nachtrag: geht bei dir die taste für /? also ich hab da probleme mit shift+7...

nachtrag 2:solltest auch mal beide taschenrechner (original und kopie) nebeneinader legen und einfach mal bissl rumdrücken, verschieden kombinationen machen und schaun ob bei beidem imer das selbe raus kommt... zudem hat windowsrechenr mehr stellen als anzeige...

nachtrag 3: länger der textbox solltest du auc hmal bissl austesten, hab da auch paar seltsame effekte^^

28.03.2007 - 15:09 Uhr

da zu suchen hat weis ich auch nicht, habs wohl noch vom ersten versuch dort vergessen Baby schäm

stimmt, hab auskommetniert und zeigt erstmal keinerlei nebeneffekte^^

naja mußt mal überlegen was das da zu suchen hatte^^
aber du hast auch in den methoden überal "leoschen" mit drin, also muß es ja für was gut (gewesen) sein, oder?

nachtrag:
ok, mein verdacht scheint sich zu bekräftigen: das leoschen is dafür da, das du nach einem operanden (+ - * / = etc.) bei den zahleneingaben wieder ein leeres feld hast...

da du dieses loeschen nun bei den clicks der zahlen mit drin hast, brauchst du das im key-event nicht mehr, darum gehts auch so^^

nachtrag 2:
manchmal ist snet gut code weg z ugeben denn dann findet man sovielsachen^^

nun gut abe diesmal ein (gewollter?) bug:
man kann z.b. kein 0,05 eingeben, da du

if (tbxeingabe.Text != "0,")

als bedingung zur zahlenbehandlung drin hast...

ic hdenke mal hat was damit zu tun das du mit 0, startest und verhindern wolltest das jmd ohne eingabe was rechnet?
naja jedenfalsl hat es einen seiteneffekt, d.h. da mußt du dir was anderes überlegen 🙂

28.03.2007 - 14:57 Uhr

so, fehler is auch schon gefunden:

problem machen diese zeile hier in deiner methode
private void tbxeingabe_KeyDown(object sender, KeyEventArgs e)


if (leoschen)
    tbxeingabe.Clear();
leoschen = false;

vorgehen ist ja, das ich z.b. 8,+,8 und = drücke und danach enter drücke, und da hat loeschen den wert true wodurch clear aufs textfeld angewendet wird, was wohl nur den wert löscht aber nicht die anzeige...

leoschen = true;

setzt du ja am ende deiner click-methoden

lösung: das clear scheinst du ja zu machen damit bei zahlen und so nur die allein drinstehen, also mußt du wieder unterscheiden sodaß dies nur bei den zahlentasten (und wo es eigentlich frür gedacht ist) gelöscht wird...

ich versteh nicht ganz wie du zu dem problem kommst... du hast ja schonmal die eingabe per buttons die funktioniert, also 2x= nacheinader gibt kein problem, aber 2xenter nacheinader

normaler weiße dürften sich die verarbeitungsmethoden auch nicht großartig unterscheiden

vorschlag allgemein:
wenn dann alles so weit läuft, code aufräumen... da is soviel code drin wovon sicher die hälfte wieder redundant ist^^
erkenne muster dann kannst du sicher vieles zusammen fassen

z.b. kannst du viele buttonclicks mit einer einzelnen methode abarbeiten... du kannst ereignishandler an mehre buttons hängen, nur so als tip
und zur unterscheidung kannst du dann z.b. den text nehmen

nachtrag:
einige tastaturbehandlungen kannst du einsparen, alt+b würde z.b. auch so dein menü öffnen, das ist windows standardverhalten

28.03.2007 - 14:41 Uhr

netter klon^^

zwei dinge gleich zu beginn:

  1. die infobox läd recht lange, was wohl ok is weil du paar daten sammelst, aber optisch schauts bei mir bissl putzig aus. ich benutzt das windows 2000 theme unter xp... da sind dann einige stellen weiß was nicht wirklich schick aussieht 😉

  2. problem konnte rekonstruiert werden... so mal schaun was faul is^^

28.03.2007 - 14:21 Uhr

kannst du dein projekt mal anhängen oer steht das unter irgendwelchen auflagen?

28.03.2007 - 13:54 Uhr

dass das falsch ist und eigentlich ö--> oe richtig wäre ist die aber bewusst oder? worum es mir bei meinem beitrag eigentlich ging 👅

hat sich denn schon was beim debuggen ergeben?

28.03.2007 - 11:35 Uhr

if (!leoschen || mread || einsdurchx)

ach ja, falls du umlaute meidest, ö schreibt man oe nicht eo^^

28.03.2007 - 08:36 Uhr

@ToFac3
hm ok, wußt ich nicht das er so kulant da ist 🙂

de ntip mit dem debugger trotzdem mal machen^^

was mir noch aufgefalle nist:
in deinem switch hast du ne menge redundanten code... versuch doch ein paar allgemeine sachen vor bzw hinter das switch zu verlegen, und so sachen wie mit dem komma in eine methode auslagern... dann schauts auch gleich bissl kompakter aus =)

27.03.2007 - 16:33 Uhr

naj was oll z.b. das hier?


if (komma)
  tbxeingabe.Text = Convert.ToString(ergebnis);
else
  tbxeingabe.Text = Convert.ToString(ergebnis) + ",";
break;

und genau das ist das problem... 23, ist nun mal keine zahl.... geh einfach mal das programm im debugger durch und schau dir die variableninhalte an

27.03.2007 - 16:03 Uhr

@cyberian
naj wenigstens haben wir die gleichen probleme^^

27.03.2007 - 15:59 Uhr

Original von herbivore
pack mal testweise in das backgroundWorker1_DoWork an den Anfang ein Thread.Sleep (100) rein. Thread.Sleep (0) und Thread.Sleep (10000) wären jeweils auch einen Versuch wert.

ok, funktioniert dahingehend das die controls alle gezeichnet werden, aber trotz allem hab ich noch das problem das ich manchmal nicht auf den button drücken kann...

verschieben vom fenster geht, wird auch neu gezeichnet... aber wie gesagt irgendwie is die ui arg belastet durch die vielen anfragen...

27.03.2007 - 15:47 Uhr

ne gleiches problem, und das auf nem core 2 duo mit 2,xy ghz und 3gb ram...

27.03.2007 - 15:36 Uhr

hier mal ein bild wie es bei mir aussieht

wie man sieht, wird nur die progressbar gezeichnet, das label sowie der button fehlen...

27.03.2007 - 15:03 Uhr

Original von herbivore
Hallo sheitman,

bei mir läuft dein Programm schnell und problemlos. Die Anzeige ist immer korrekt, der Fortschritt läuft in 2-3 Sekunden durch und Abbrechen lässt sich auch betätigen.

tja... das ist schön... aber bei mir ists halt nicht so...

27.03.2007 - 14:40 Uhr

hier mal mein projekt...

wie gesagt, die gui ist irgendwie sehr träge und ich hab den verdacht das durch die häufigen berechnungen und damit hergehnden updateanfragen die gui einfach überbelastet ist

ich hab das auc hetwas modifiziert sodaß der dialog nicht gleich zu geht sodnern über das x erst schließen mußt... hat aber mitden problem nix zu tun... starte einfach immer mal über den button auf form2 den form1 dann müßtest du sehen das er ab und dan einige sache nnicht zeichnet und das du probleme hast auf den abbrechen knopf zu drücken

27.03.2007 - 14:25 Uhr

herbivore, oben im ersten post ist doch sein beispiel...

da ist ein backgroundworker schon drin und ich hab es mal nachgebaut und hab das gleiche problem... ich hab das gefühl das zuviele repotprogress aufrufe stattfinden... ich hatte mal ein beispiel mit datei kopieren dsa lief sauber mal chaun ob ich das wieder finde^^

interessant wird das ganze wenn du mal nen knopf rein machst der erst start aufruft... dann hast du das problem nicht

abe was mir aufgefallen ist, der button zum abbrechen reagiert nicht immer... bzw er ist nicht drückbar weil die ui nicht darauf reagiert...

27.03.2007 - 11:47 Uhr

eigentlich sollten die mit dem fenster disposed werden... aber ich würde das disposen nicht im formular machen, sondern von dort, wo du es aufgerufen hattest...

27.03.2007 - 11:34 Uhr

normalerweise nimmst du alles was im release bzw im debug vereichnis ist... je nachdem was du eben alles referenzierst oder benutzt

27.03.2007 - 11:21 Uhr

kannst du mal den code posten wie du deine form aufrufst?
verwendest du jedesmal new?

das problem mit dem thread seh ich hier im form nicht... er erzeugt ja nichts innerhalb der workermethoden...

27.03.2007 - 10:03 Uhr

Original von Stu42
ja das problem ist, in dem geräte ist eine UV-Lampe drin. Die sind teuer und haben eine begrenzte lebensdauert. Zu oft darf man sie aber auch nicht ein und ausschalten.

Aber wenn nach 10 min das Programm wieder gestartet wird, darf der TImer das geräte nicht abschalten.

D.h der Timer muss auch schauen wer zugriff auch das Gerät hat.

vieleicht ist da doch das externe programm besser.

dazu fällt mir die tolle thematik ein "verhindern von mehreren instanzen meiner anwendung"... such mal dazu im forum... glaub im faq bereich steht da sicher was 🙂

im grunde gehts darum das dein programm beim starten schaut ob es denn schon läuft
falls ja, könnte dein programm dann eine nachricht an sich selbst (also die schon bestehende instanz) schicken, daß dann dadurch den timer unterbricht und wieder arbeitet

könnte bissl fummelarbeit sein aber klingt vom prinzip her für mich als elegante und schöne lösung =)

27.03.2007 - 09:49 Uhr

Original von Stu42
ja ich brauche nen 15 min timer, der geräte nach beendigung des Programmes abschaltet.

Das mit der unsichtbaren form finde ich von der Struktur her nicht so toll, diese kleine sache an einer so "großen" stelle unterbringen.

Das externe programm muss dann ja auch abfragen, wenn meine form geschlossen ist.

Ich werd dann doch wohl den CreateThread nehmen müssen.

warum blendest du beim schließen deines programmes nicht einfach nur die form aus, startest nen 15min timer und fährst beim ablauf die geräte runter und beendest danach das programm? das macht meiner meinung nach am meisten sinn...

27.03.2007 - 09:45 Uhr

meines erachtens nach kannst du zur laufzeit nicht an der eigenen datei rumfummeln

ehrlich gesagt versteh ich die anforderungen nicht ganz... warum habt ihr euch dagegen entschieden die fragen und antworten in einer externen datei zu speichern?

zur not könnte man die antworten ja verschlüsseln über private/public key... falls es bei der ganzen sache darum geht das niemand die fragen bzw antworten lesen kann

27.03.2007 - 09:10 Uhr

naja, die hier vorgeschlagenen tabellen kannst du auch mit datatables abbilden und die kann man über eine methode als xml speichern bzw. von xml laden...

das mit an und aus schalten des programms hat nichts mit der datenspeicherung zu tun... mußt halt nur dafür sorgen das er immer gleich die daten in die datei speichert...

wie sagt man so schön: it's your turn 😉

nachtrag: sql server ist sicher überzogen aber schau dir mal mssql compact an
da hast nen in memory sql server quasi der nicht alzu resourcenfressend is

26.03.2007 - 16:59 Uhr

brauchst du vielleicht zum ändern schreib und leserechte?

26.03.2007 - 15:09 Uhr
runden = runden % 2;

da liegt der fehler drin... denk mal nach was die zeile macht dann weißte auch wo das problem is

wenn dein debugger nicht geht mach nen bleistift test... spiel das ganze einfach mal auf dem papier durch und vergleich die werte die du hast mit denen die du erwartet hast

nachtrag: du prüfst nur die 1. eingabe auf gerade/ungerade, bei der wiederholten eingabe allerdings nicht wieder... prüf mal deine aufgabenstellung ob du nicht jede eingabe überprüfen sollst, wenn ja dann fehlt da noch bissl was 😉

sieht mir übrigensn ach ner übung für verzweigung und wiederholungen aus^^

26.03.2007 - 15:01 Uhr

ups, ja dann oben bei mir noch das virtuell mit rein^^

@kpatrickk
wie herbivore schon sagt, mach das static weg und den zweiten parameter, denn den brauchst du auch nicht

statische methoden sidn an klassen gebunden, nicht statische methoden an objekte

d.h. du mußt die zuerst ein objekt vom typ TcpCommunication erstellen und von dem rufst du dann deine methode auf

da deine kindklassen von dieser klasse erben, funktioniert das bei denen auch

siehe meinen code von oben + paar syntaxfixes 😉

26.03.2007 - 11:41 Uhr

naja im grunde hast du immer ein beginn und ende paar... daraus könntest du einen datensatz machen
die arbeitszeit wäre dann ende-beginn, und wenn du das für nen tag haben willst dann fügst dem datensatz noch ein datum mit hinzu und summierst alle ende-beginn für einen tag

deine zeitaufteilung kann man ja auch so sehen

  • Arbeitsbeginn -> beginn1

  • Beginn Pause -> ende1

  • Ende Pause (wiederaufnahme der Arbeit) ->beginn2

  • Beginn Pause ->ende2

  • Ende Pause (wiederaufnahme der Arbeit) ->beginn3

  • Arbeitsende ->ende3

stunden gesammt = ende1-beginn1 + ende2-beginn2 + ende3-beginn3

datensatz könnet so ausehen:
id, mitarbeiter, beginn,ende,datum

für obrigen fall dann
1,meier,7:00,8:30,21.1.2007
2,meier,9:00,12:30,21.1.2007
3,meier,13:00,16:00,21.1.2007

abfrage müßte dann sowas hier sein (hoff ich mal^^)
select mitarbeiter,sum(ende-beginn) as stunden, datum from tabelle1 group by mitarbeiter,datum

hth

26.03.2007 - 11:22 Uhr

ich würde erstmal davon abgehen static zu benutzen

und dann ists recht simpel, du kannst ja sowas aufbauen


class Parent {

    public void Send(...) {
        ...
        Console.WriteLine(SomeMethodReturningAString());
    }

    protected string SomeMethodReturningAString() {
        return "Parent";
    }
}

class ChildA {
    protected overwrite string SomeMethodReturningAString() {
        return "ChildA";
    }
}

class ChildB {
    protected overwrite string SomeMethodReturningAString() {
        return "ChildB";
    }
}

nun sollte das hier gehen


Parent p = null;
p = new Parent();
p.Send(); //Ausgabe Parent

p = new ChildA();
p.Send(); //Ausgabe ChildA

p = new ChildB();
p.Send(); //Ausgabe ChildB

eventuell bissl mit abstract auch arbeiten, je nachdem

26.03.2007 - 09:57 Uhr

schau dir mal Win32_LogicalMemoryConfiguration und Win32_PhysicalMemory ansotnen versuchs mit google und suchbegriffen wie wmi physikal memory etc.

das tool is übrigens richtig nice, danke für den link 🙂

26.03.2007 - 09:49 Uhr

Ja sheitman. Antworten wie die deien sind es, die einen immer wieder Aufbauen.
Ich finde es auch gut, das nicht jedes x-beliebige Programm an meiner Systemuhr rumbastelt. Und ? Darf ich mir deswegen nicht trotzdem eines schreiben, was es trotzdem tut ?

Genau das ist es ja, was ich vermeiden will, das mein Programm, auch nur kurzfristig, Adminrechte bekommt. Nur weil man mal eben die Systemzeit ändern will muß man einem Programm doch nicht gleich vollzugriff auf alles im Computer geben. So blöd kann nicht mal Microsoft sein.
Obwohl, hmm, wenn ich mal so drüber Nachdenke. 🙂

für microsoft war es anscheinend etwsa nicht so triviales...
bei uns in der schule waren die schüleraccounts auch so eingestellt das die uhr nicht geändert werden konnte
das war dahingehend nervig, wenn man mal den dortigen kalender benutzen wollte...
aberletzen endes fummelst du am system rum
und die uhrzeit ist garnicht so unwichtig...

was mich ma interessiert: wenn du ganz normal über das systray die uhr ändern willst, kommt dan nauch eine admin abfrage?

interessant in dem zusammenhang wäre mal eine liste, was so alles administratorrechte erfordert... über kurz oder lang wirds da ja an einigen stellen knallen

deinen unmut kann ich verstehen zwecks adminrechte vergeben, aber momentan ist es doch so das viele selbst mit einem adminaccount angemeldet sind und die programme dadurch auch machen können was sie wollen...
von daher kann man jetzt wenigstens enscheiden ob man dem programm das erlaubt oder nicht, mit allen dazugehörigen konsequenzen

23.03.2007 - 16:59 Uhr

ich finds gut das nicht jedes belibeige programm an meiner uhr rumschrauben kann.

kann man unter vista einem programm permanent bestimmte rechte geben? dann kannst du dir einen dialog ja selber bauen, wo du abfragst ob das programm zeit ändern darf und bei ja soll er adminpaßwort eingeben und dann setzt du die rechte halt... was anderes wird dir nicht übrig bleiben...

23.03.2007 - 08:27 Uhr

dank dir =)

22.03.2007 - 14:58 Uhr

so ein bild wie du es oben hast erstellen g

also rechtecke die an einem kreis angeordnet sind...

22.03.2007 - 12:07 Uhr

dein "unnützer" thread hat mich dazu inspiriert auch mal so ein control zu bauen^^

schlag mich grad mit den rechtecken in kreis malen rum... glaub meine mathematik is eingerostet -.-

22.03.2007 - 10:07 Uhr

ich finds nicht schlimm für etwas mehr sicherheit auf ein klein wenig bequemlichkeit zu verzichten 🙂

22.03.2007 - 09:57 Uhr

Wenn dem so wäre - würde ich dich darum bitten mich darüber aufzuklären WANN ich denn nun eine Verwaltete ID brauche.

ich würd sagen eine verwaltete id brauchst du dann, wenn du anhand der anderen eigenschaften eines objektes keine eindeutige unterscheidung feststellen kannst

das prinzip verwendest du ja z.b. beim modellieren einer datenbank 😉

21.03.2007 - 09:03 Uhr

Vielleicht ist ja als Standardnamespace bei dir ExceptionHandler eingetragen... das kann ma nauch nachträglich ändern... mußt mal schaun bei der Seite wo man den Assemblynamen angibt steht das mit.

14.03.2007 - 17:46 Uhr

Original von hard_42
japp sollen keine buchstaben eingegen werden

schau mal unter TextBox bestimmte Eingabe unterdrücken

14.03.2007 - 16:51 Uhr

für das formatieren schau mal unter http://blog.stevex.net/index.php/string-formatting-in-csharp/

wenn ich richtig gesehen habe würde das so hier reichen

txtAnzeige.Text = string.format("{0:n}",Ergebnis);

hab das jetzt aber nicht ausprobiert...

für den numblock kannst du das so machen das du einfach die eingegebenene zeichen abfängst und nur wenn es zahlen sind weiter verwendest
es gibt ein entsprechednes event was ausgelöst wird beim tastendruck

ich schätze mal du wilslt verhindern das man buchstaben eingibt, oder?