Laden...
M
markus.bodlos myCSharp.de - Member
Österreich / Steiermark Dabei seit 01.03.2008 205 Beiträge
Benutzerbeschreibung

Forenbeiträge von markus.bodlos Ingesamt 205 Beiträge

29.04.2008 - 22:23 Uhr

Hallo weiß nicht so ganz obs dir eine hilfe ist, aber du kannst prinzipiell schon eine eigene Windowsmessage verarbeitung aufbauen. In deiner Formularklasse kannst du mit


        protected override void WndProc(ref Message m)
        {
            
        }

alle events verarbeiten, mit


base.WndProc(ref m);

kannst du diese an die hauptfunktion weitergeben. Such in der msdn nach "Message Struktur" vielleicht kannst du dir ja was zusammen bauen.

mfg Markus

28.04.2008 - 22:29 Uhr

@Preli:

Danke für die info, schade drum....

schönen abend - markus

28.04.2008 - 15:38 Uhr

Hallo du brauchst doch nur die Funktion die ich gepostet habe zu verwenden und für 6 Elemente umzuschreiben, also:


private static void FillListView(ListView ctl, string[] PlatesForSubBatchDisplay)
        {
            if (PlatesForSubBatchDisplay.Length != 6)
                throw new ArgumentException("Das Array muss 6 Werte enthalten");

            if (!ctl.Items.ContainsKey(PlatesForSubBatchDisplay[2]))
            {
                ctl.Items.Add(PlatesForSubBatchDisplay[2], PlatesForSubBatchDisplay[0], -1).SubItems.AddRange(new string[] 
{PlatesForSubBatchDisplay[1],
PlatesForSubBatchDisplay[2],
PlatesForSubBatchDisplay[3],
PlatesForSubBatchDisplay[4],
PlatesForSubBatchDisplay[5]});
        }
}

diese Funktion kannst du doch als solche verwenden....

mfg Markus

28.04.2008 - 14:06 Uhr

@Preli:

ist das generell auf der TU in Graz so? oder nur bei Softwareentwicklung und Wirtschaft?

mfg Markus

28.04.2008 - 13:17 Uhr

Hallo Jedda,

dasProblem das du hast ist, dass Contains() nicht in subitems sucht. Du kannt das aber umgehen indem du deine Spalte, welche du alsSchlüssel verwenden willst auch der Eigenschaft Key zuweist, hier ein Beispiel mit 2 Spalten die zweite ist mein Unique Key.


        private static void FillListView(ListView ctl, string[] PlatesForSubBatchDisplay)
        {
            if (PlatesForSubBatchDisplay.Length != 2)
                throw new ArgumentException("Das Array muss 4 Werte enthalten");

            if (!ctl.Items.ContainsKey(PlatesForSubBatchDisplay[1]))
                ctl.Items.Add(PlatesForSubBatchDisplay[1], PlatesForSubBatchDisplay[0], -1).SubItems.Add(PlatesForSubBatchDisplay[1]);
        }

mfg Markus

28.04.2008 - 12:31 Uhr

Wenn du es fürs Logging verwenden willst und den logger dafür mehr oder weniger selber implemtieren willst, empfehle ich dir PostSharp. Ist ein wirklich gutes Framework was zur AspekOrientierten Programmierung auch zu verwenden ist. Link zu PostSharp. Auf der Seite kannst du es gratis runterladen, ein Video ist ebenfalls auf der webside zu finden in welchem die Mächtigkeit von Postsharp an einem kurzen Beispiel erklärt wird.

mfg Markus

28.04.2008 - 11:59 Uhr

Hallo,

du kannst es über den Stack machen


        private void B()
        {
            System.Diagnostics.StackTrace s = new System.Diagnostics.StackTrace(System.Threading.Thread.CurrentThread, true);

            MessageBox.Show("Methode B wurde von Methode " + s.GetFrame(1).GetMethod().Name + " aufgerufen");
        }

mir ist nicht bekannt dass der Reflection Namespace im besonderen MethodInfo sowas auch unterstützt.

mfg Markus

28.04.2008 - 09:30 Uhr

Hallo,

um welches Fenster handelt es sich denn? Eines deiner Anwendung oder ein externes? Wenns eines von deine ist ist einfach:

f.Bounds = Screen.PrimaryScreen.Bounds; // f ist dein Form

mfg Markus

26.04.2008 - 13:02 Uhr

Hallo Herbivore,

kannte ich noch nicht 😉

Danke, mfg Markus

26.04.2008 - 00:48 Uhr

Hallo,

das was hier so kryptisch angegeben wird, sind Asciicodes in Hexadezimaler schreibweise.
Und wie robbyrc richtig in Erinnerung hatte ist der Ascii Code 0x20 eben das Leerzeichen sowie 0x5C der Backslash.

Alle codes auf einen Blick unter diesem Link

mit


            String s = "C:%5CUsers%5CMax%20Mustermann%5CAppData%5CLocal%5CMicrosoft%5CWindows%20Sidebar%5CGadgets%5C";

            s = s.Replace("%5C", "\\").Replace("%20", " ");

würdest du alle Zeichen richtig dargestellt haben.

mfg Markus

25.04.2008 - 13:54 Uhr

Ah, danke Herbivore!

mfg markus

25.04.2008 - 13:29 Uhr

Eine Frage hab ich doch noch...

Wie sieht das dann mit statischen Klassen aus? Wird dann EIN Objekt am Heap angelegt was quasi wie ein Singleton fungiert?
mfg Markus

25.04.2008 - 13:04 Uhr

Hallo,

danke für eure Antworten!

mfg Markus

24.04.2008 - 22:07 Uhr

Hallo,

wie ja bekannt ist wird in dotnet ein Objekt am Heap gespeichert. Wo wird aber die Funktionalität also eigentlich die Klasse selbst als Schablone gespeichert? Liegt die auch am Heap? Ist die üerhaupt zur Laufzeit als solche vorhanden oder stell ich mir das falsch vor?

mfg Markus

23.04.2008 - 10:54 Uhr

Hallo Herbivore,

danke funktioniert super! Eine frage ist jetzt aber noch aufgekommen, ich öffne das assembly:

System.Reflection.Assembly myAssembly = System.Reflection.Assembly.LoadFile(Path_Fitness);

verwende eben mein Feld darin. Leider sagt mir dotnet dass wen ich einen Schreibzugriff auf die Datei (-> Path_Fitness = Pfad) machen möchte, bekomme ich die Meldung, dass diese bereits geöffnet ist. Wie schliese ich diese wieder? hab schon versucht einen Usingblock darüber zu legen, leider implemetiert die Klasse assembly IDispose nicht...

mfg Markus

23.04.2008 - 09:00 Uhr

Guten Morgen,

ich hab in keiner Anwendung bisher 1000(!) Controls gebraucht! Was willst du denn machen? Vielleicht solltest du dir das Design nochmal überlegen.

mfg Markus

23.04.2008 - 08:04 Uhr

Guten Morgen,

ich komm nicht weiter! Ich compiliere zur Laufzeit eine von mir definierte statische Klasse welche eine anonyme Function als öffentliches globales sttaisches feld beherbergt. Das funktioniert auch so weit, habs mir mit LR's Reflector angeschaut, Klasse wird erstellt und Feld auch.
Wie kann ich nun auf dieses Assembly zur Laufzeit zugreifen? Ich habs mal mit Reflexion versucht:


System.Reflection.Assembly myAssembly = System.Reflection.Assembly.LoadFile(PATH);

Damit wird dasAssembly richtig geladen, danach versuchte ich mit

myAssembly.GetType().GetMembers();

mein Feld auszulesen - war dabei.

Leider stehe ich jetzt an! Wie kann ich einer zur designzeit erstellten Methode welche einen delegate erwarten, diesen aus diesem Assembly übergeben?

mfg Markus

22.04.2008 - 23:27 Uhr

Wie Golo sagte ist das sicher am schnellsten, allerdings muss die Liste dafür sortiert vorliegen.

mfg Markus

21.04.2008 - 16:38 Uhr

Hallo,

was hast du denn für ausgangspunkt? weißt du von welcher position das foto (?) geschossen wurde oder kennst du andere markante punkte auf die man rück rechnen könnte?
Brauchte das auch mal, orientoerte mich dabei an diesem Projekt:
Hier

Da gehts um eine Nintento wii mit welcher eine IR Led getrackt wird um so einen Touchscreen nachzubilden, vielleicht hilfts ja.

mfg Markus

21.04.2008 - 16:29 Uhr

Der umgekehrte Weg geht nicht, da du dafür Änderungen am Typ int vornehmen müsstest was aber nicht möglich ist.

Das ist falsch, der implizite cast kann natürlich auch in die andere Richtung geschrieben werden:


    public struct MyStruct
    {
        int intern;
        public MyStruct(int val)
        {
            intern = val;
        }
        public static implicit operator MyStruct(int val)
        {
            return new MyStruct(val);
        }

        public static implicit operator int(MyStruct val)
        {
            return val.intern;
        }
    }

sowie auch der explizite dazu musst du nur dass schlüsselwort implicit auf explicit ändern.

mfg Markus

21.04.2008 - 08:46 Uhr

Hallo,


  DataRowView reihe = (DataRowView)this.bELEGEBindingSource.CurrencyManager.Current;

checkBox1.Visible = !Convert.ToBoolean(reihe["abgeschlossen"]

mfg Markus

21.04.2008 - 00:10 Uhr

Hallo,

lade dir "Lutz Roeder's Reflector" runter. Ist ein gutes Tool u.a. auch zur Codeanalyse. Wenn du es geladen und gestartet hast kannst du dir alle Funktionen im Detail betrachten. Natürlich sind diese funktionen aber nur bis zu einer gewissen Grenze mit diesem System nachvollziehbar da da nur das Abstraktionslevel auf C# Basis ansehen kannst und keinen assemle code bekommst. In einigen fällen werden auch native dlls verwendet bzw. api aufrufe.

mfg Markus

20.04.2008 - 23:16 Uhr

Hallo,

ja die Erklärung hört sich plausibel an!

Damit läge doch aber auch die Lösung deines Problems auf der Hand. Du implementierst es in jeder Klasse statisch von Hand! Da du wie in deinem vorherigen Posting gesagt den Aspekt der Polymorphie ohnehin dadurch nicht nutzen kannst bringts dir eh nichts wenns abstrakt in der Basisklasse definiert ist...
Oder die zweite Möglichkeit wäre eben die Instanzeigenschaft.

mfg Markus

20.04.2008 - 21:41 Uhr

Hallo golo,

würde mich auch interessieren, hab grad mal gegoogelt... komischerweise findet man in fülle nur die information dass abstract methoden ja implizit virtual methoden sind und dass man diese nun mal nicht static machen kann da virtual eine instanzierung benötigt. Ich weiß die info ist nicht grad befriedigend...
Hab nur gelesen das sowohl Java als auch dotnet dieses feature nicht unterstützen.

poste bitte falls du eine Lösung hast.

mfg Markus

17.04.2008 - 22:55 Uhr

Hallo Mike001,

dein Konzept weist noch ein paar mängel auf:

1.) Wofür üerhaupt dieser String arr? Ich glaube zu wissen dass du bisher C programmiert hast wo man ja korreter weise einen string als char array anlegt. in c# ist dieses char array aer schon der typ string. du brauchst also nicht noch ein array vom typen string anlegen. Nimm doch für die Abfrage gleich das Argument "code"

2.) Mir ist nicht ganz klar wie du das mit den anführungszeichen so losen willst, denn es gibt auch folgenden korrekten fall welcher eine ungerade anzahl von dopplehochkomma zulässt:


printf ( "Ein \" gibt es auch in Zeichenketten" );

3.) Die Idee alle Klammern global zusammenzusetzen ist auch keine Lösung, denn dieser Fall wäre nach deinem Programm her korrekt:


int i;

i =    5 * (2 + 3;  // Hier fehlt die geschlossene Klammer!!!
i += 2 * 1 + 2);   // und hier die offene!!!

4.) Deine Idee die Kommentare abzufangen wird nicht funktionieren denn mit der zweiten abfrage (arr[i + 1] == "/")) wirst du einen Laufzeitfehler erzeugen, da im Array "arr" am Index i+1 noch nicht einmal ein Zeichen steht.

Es kommt natürlich auch an was du jetzt wirklich proggen willst? willst du wissen wo sich der Fehler also in welcher Zeile sich dieser befindet oder "nur" ob es syntaktisch korrekt ist?

Mein Ansätze so etwas zu erstellen wären:

  1. Ersetze alle " mithilfe der String.Replace Methode mit nichts, dadurch verschwinden diese mal.

  2. Splitte dir deinen Code in Zeilen als Trennzeichen nimmst du den Strichpunkt. (Die Möglichkeit das ein Strichpunkt in einem string steht hab ich nicht miteinbezogen)

  3. Jetzt hast du ein string array / liste (<- besser) wo in jedem element eine C-Code Zeile steht. Jetzt macht es auch Sinn deine Idee zu verwenden und zu überprüfen wieviele Klammern PRO ZEILE stehen und ob die Anzahl der anderen einschliesenden Operatoren korrekt ist.

Abschliesend muss ich aber trotzdem sagen, dass das für dich als einsteiger in c# ein sehr hoch gestecktes ziel ist. Ich empfehle dir dich zuvor wirklich gut mit der Sprache und den Möglichkeiten des dotnet frameworks auseinander zusetzen. Es gibt einige Funktionen die dir beim Lösen dieser Aufgabe behilflich sein dürften (Stichwort String - Klasse). Es gibt auch durchaus Online Bücher welche gratis zum Download mit Link auf dieser Seite zu finden sind (Linkes Hauptmenü / Ressourcen / openbook (Visual) C#).

mfg Markus

14.04.2008 - 21:53 Uhr

Hallo,

dein Formatstring muss so aussehen:


"{0:D2}:{1:D2}:{2:D2}"

mfg Markus

14.04.2008 - 17:12 Uhr

Hier war vor kurzem ein thread zu dem Thema

mfg Markus

14.04.2008 - 16:03 Uhr

siehe auch MSDN,
damit kannst du wie in C mit dem "..." beliebig viele argumente aber vom gleichem Typ an eine Methode übergeben!

Bsp:


public static void PrintStringsToMessageBox(params string[] list) 
   {
      for each (string s in list)
         MessageBox.Show(s);
   }

public static void Main() 
   {
      PrintStringsToMessageBox("Hallo", "mycsharp", "test123", "567");
   }

mfg Markus

EDIT: param ist für die XML Doku und params ist das Schlüsselwort zur Parameter übergabe

13.04.2008 - 23:19 Uhr

Hallo,


        public static void FillListWithPortNames(ComboBox lc)
        {
            lc.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames());
        }

mfg Markus

13.04.2008 - 12:11 Uhr

Schade, aber danke für eure ideen und kommentare

mfg MArkus

13.04.2008 - 12:10 Uhr

Danke, manchmal sieht man den Wald vor lauter Bäumen nicht.

mfg Markus

12.04.2008 - 23:07 Uhr

Hallo nochmal,

kann mir jemand sagen warum das bei vererbung funktioniert:

class Sum
    {
        public virtual long sum() { return 0; }
    }

    class numbers : Sum 
    {
        public int a=2;
        public int b=4;

        public override long sum()
        {
            return a + b;
        }
    }

    class mainclass
    {
        public void foo()
        {
            numbers n = new numbers();
            long b = n.sum();
        }
    }

aber bei einem interface nicht????

interface ISum
    {
        long sum();
    }

    class numbers : ISum 
    {
        public int a=2;
        public int b=4;


        long ISum.sum()
        {
            return a + b;
        }
    }

    class mainclass
    {
        public void foo()
        {
            numbers n = new numbers();

            long b = n.sum();
        }
    }

wie könnte ich das erste bsp. mit interfaces lösen?

mf Markus

12.04.2008 - 23:05 Uhr

hallo,

ich hab eine klasse winkel geschrieben wo ich den wert im konstruktor übergeben kann zusätzlich muss man angeben ob es sich um grad oder um radiant handelt. also:

Angle a = new Angle(45, Angle.TypeOfAngle.Degree);

ich will aber das sowas möglich ist:

Angle a = 45°;

Hab zwar im moment einen impliziten cast operator von double auf meine winkel klasse üerladen und den wert immer als grad interpretiert aber schöner wärs eben anders.
Ich denk mir dass es doch gehen muss da der compiler ja 4f auch als einen float wert erkennt...

wär schön wenn wer eine antwort weiß wie ich sowas ewerkstellige.

mfg Markus

10.04.2008 - 00:14 Uhr

Wenn du das Array von Hinten nach Vorne durchgehst kannst dir sogar die Prüfung
ob irgendwas drinnen steht oder die PLZ kleiner als das kleinste(erste) Element ist sparen...


        private int GetSonnentage(int PLZ, int[,] array)
        {
            for (int i = array.GetLength(0) - 1; i >= 0; i--)
                if (array[i,0] <= PLZ) return array[i,1];
            return -1;
        }

mfg Markus

09.04.2008 - 08:45 Uhr

Kostet etwa 4cm Decken höhe und etwa 25€ je nach Raum größe

Na das mit 25€ glaub ich ja nicht... Denn die Platten alleine sinds ja noch nicht, komt noch verspachteln und mahlen/verputzen. Und wenn dir nötige Ressource fehlen kannste auch noch von extern wen oder was dazukaufen.

Für was brauchst du es denn? Falls es für ein Schlafzimmer ist, besteht ja durchaus die Möglichkeit die Steren zu projezieren. Wenn du das aber für was professionelles brauchst a la eine Bar würde ich ebenso die Decke abhängen da du wohl möglich auf dauer nicht mit einer "Discokugel" zu frieden sein wirst.

mfg

08.04.2008 - 18:01 Uhr
this.Text = "hallo";

mfg

PS: nimm dir Programmierhans' rat zu herzen, gibt gute openbooks, link auf dieser seite.

07.04.2008 - 16:38 Uhr

ich werd mir das am abend mal ansehen...

danke, mfg

07.04.2008 - 16:30 Uhr

Kennt ihr die schon?

Hier

07.04.2008 - 16:24 Uhr

Falls du es ja doch schaffst

Hier
und natürlich wiki

viel erfolg 😉

07.04.2008 - 12:20 Uhr

Danke für die weitere Unterstützung. Hier mein praktisches Beispiel welches ich verstehen will Hier

mfg Markus

07.04.2008 - 12:19 Uhr

Danke für die reichlichen Anregeungen in meinem letzten ThreadHier. Bin auf dieses Thema gekommen als ich mich unter anderem mit Aspekt Orientierter Programmierung beschäftigte. Ich verwende dazu die PostSharp Komponente, mitwelcher ich z.B. einen Pointcut definieren kann durch setzen eines Attributes für die Klasse/Methode/...
Wie funktioniert das?
Wie kann ein Attribut den kompletten Programverlauf mit Aspekt Orientierten Mitteln versehen? Wie entsteht dieses Generat?

mfg Markus

07.04.2008 - 08:10 Uhr

Danke euch beiden!

mf Markus

07.04.2008 - 07:34 Uhr

Guten Morgen,

will mich gerade ein wenig mit Attributen beschäftigen, verstehe mittlerweile wie der Syntax aussieht und wie man sie imlementiert. Mein Frage nur, wozu?
Kann mir jemand ein praktisches Beispiel nennen wann ihr sowas gebraucht habt?
(Nicht die Anwendung, das wäre ja eh unter anderem serialisierung, sondern die Verwendung von Custom Attributes)

mfg Markus

06.04.2008 - 23:08 Uhr

Hallo,

du hast den fehler höchstwahrscheinlich daher, da du deine variable pause nicht instanziert hast. Also:


DateTime pause = new DateTime();

Ebenso würd ich den Code-Teil gerne in eine Art Procedure (nennt sich so in Delphi) machen, doch ich weiß nicht wie sich das in C# nennt. unglücklich Vielleicht kann mir da jemand weiter helfen.

Als letztes würde ich gerne während der Laufzeit von der Form die Eigenschaft ändern, heißt dass ich dort eine Zeitanzeige machen möchte, doch ich kann die Eigenschaft scheinbar nicht so einfach ändern wie bei einem Label, wie kann ich das dort machen?

Diese beiden Fragen sind so trivial, dass ich dich darauf hinweisen muss, dass es gute openbooks gibt in welchen du c# lernen kannst.
Siehe auch [Hinweis] Wie poste ich richtig? unter Punkt 1.1.[1]

06.04.2008 - 21:41 Uhr

Hallo,

warum speicherst du denn nicht gleich deinen Wert als Key in den Setting ab? Falls du die Konvertierung trotzdem brauchst:


Keys k = (Keys)Enum.Parse(typeof(Keys), "Hier steht dein String";

mfg Markus

03.04.2008 - 22:35 Uhr

Hallo Golo,

weiß nicht obs eine elegante Lösung ist aber du könntest ein Dictonairy erstellen in dem du einerseits die Exception als Schlüssel verwendest und als wert ein array mit 2 elementen wobei eines angibt ob die exception geworfen werden soll und das 2te eben deinen text welcher zurückgegeben wird.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Dictionary< Type, Werte> ex_dict = new Dictionary<Type, Werte>();

            ex_dict.Add(typeof(ExceptionA), new Werte(true, "Foo"));
            ex_dict.Add(typeof(ExceptionB), new Werte(false, "Bar"));

            try
            {
                throw new ExceptionA();
            }
            catch (Exception ex)
            {
                Werte w = ex_dict[ex.GetType()];

                if (w.Auswerfen)
                    throw;
                else
                    return w.Text;
            }
        }
    }

    class Werte
    {
        public bool Auswerfen;
        public string Text;

        public Werte(bool auswerfen, string text)
        {
            this.Auswerfen = auswerfen;
            this.Text = text;
        }
    }

    class ExceptionA : Exception
    {

    }

    class ExceptionB : Exception
    {

    }
}

mfg Markus

25.03.2008 - 22:36 Uhr

Hallo,

meinst du die besonderheit dass die variable "abort" in beiden threads zugänglich ist? falls es das ist weis ich aber trotzdem nicht wie das feature heißt...

mfg Markus

24.03.2008 - 02:07 Uhr

Das versteh ihc nicht, bei mir ändert sich der text sowie ich mit meinem element über einem neuen item bin. wobei die scanfläche meiner itemgröße entspricht.
Zum testen verwendete ich dia listviewansicht LIST und als dragobjekt eine verknüpfung vom desktop.

mfg Markus

23.03.2008 - 23:27 Uhr

Du kannst vielleicht vorher den Hashcode der Liste abfragen und nachher auch - und wenn der nicht leich ist...

mfg Markus

23.03.2008 - 22:30 Uhr

Ich korrigier dich 😉


        private void listView4DragOver(object sender, DragEventArgs e)
        {
            PDragOver = 3;
            try
            {
                Point ClientKoo = this.listView4.PointToClient(Cursor.Position);
                ListViewItem selection = listView4.GetItemAt(ClientKoo.X, ClientKoo.Y);
                string ItemName = selection.Name;
                groupBox2.Text = ItemName;
            }
            catch
            {

            }
        }

mfg Markus